Vue: добавить компонент к элементу

#javascript #vue.js #vue-component

#javascript #vue.js #vue-компонент

Вопрос:

У меня есть компонент vue, который выглядит следующим образом:

 <template>
  <div class="toast" role="alert" aria-live="assertive" aria-atomic="true" data-autohide="true" data-delay="5000">
    <!-- HTML Clipped -->
    <div class="toast-body">{{message}}</div>
  </div>
</template>

<script>
export default {
  props: ['title', 'message']
}
</script>
 

Затем у меня есть EventListener, который прослушивает сообщения, отправленные через postMessage. Это действительно работает, но я не думаю, что mount — это правильный способ делать то, что я хочу.

 window.addEventListener('message', e => {
  let toastComp = Vue.extend(Toast)
  let toast = new toastComp({
    propsData: {
      message: 'hello'
    }
  }).$mount('.toast-container')
})
 

То, что я ищу, заключается в том, чтобы vue добавлял компонент к .toast-container элементу вместо замены элемента. Как это можно сделать?

Ответ №1:

Как насчет создания и добавления элемента внутри .toast-container , а затем подключения вашего компонента к этому новому элементу:

 window.addEventListener('message', e => {
  const toastContainer = document.querySelector('.toast-container')
  const mountNode = document.createElement('div')
  mountNode.id = 'mount-node'
  toastContainer.appendChild(mountNode)

  let toastComp = Vue.extend(Toast)
  let toast = new toastComp({
    propsData: {
      message: 'hello'
    }
  }).$mount('#mount-node')
})
 

Комментарии:

1. вместо того, чтобы передавать #mount-node $mount() , я думаю, было бы лучше передать mountNode элемент

2. Рад, что это помогло вам 🙂

3. Где был объявлен / установлен Toast, чтобы вы могли получить к нему доступ в прослушивателе событий?