【问题标题】:Vue: Append component to elementVue:将组件附加到元素
【发布时间】:2019-04-19 15:59:56
【问题描述】:

我有一个看起来像这样的 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 元素而不是替换元素。如何做到这一点?

【问题讨论】:

    标签: javascript vue.js vue-component


    【解决方案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')
    })
    

    【讨论】:

    • 而不是将#mount-node传递给$mount()我认为传递mountNode元素会更好
    • 很高兴这对您有所帮助:)
    • Toast 在哪里声明/设置,以便您可以在事件监听器中访问它?
    猜你喜欢
    • 2021-07-04
    • 2018-08-18
    • 2014-02-24
    • 1970-01-01
    • 2017-05-16
    • 2020-07-07
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多