#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, чтобы вы могли получить к нему доступ в прослушивателе событий?