【问题标题】:Vue3 Listen to event from dynamically created child component, $on replacementVue3 监听来自动态创建的子组件的事件,$on 替换
【发布时间】:2021-08-03 14:29:35
【问题描述】:

我正在动态创建一个 Vue 组件,我想监听它发出的事件。我知道您可以在标记中使用@eventName,但我正在使用createApp 创建组件。

  const div = document.createElement('div');
  this.$refs.login.appendChild(div);

  let props = {
     /** some props **/
  };

  createApp(Component, props,).mount(div);

这就是我创建Component 的方式。这个答案here 适用于我的问题,但它适用于 Vue2 并且 $on 已在 Vue3 中删除。

如何使用 Vue3 实现这一点?

【问题讨论】:

  • 我能想到的一件事是将回调作为道具传递,然后在子组件中执行,但这似乎有点乱。

标签: javascript vue.js vue-component vuejs3


【解决方案1】:

您可以使用render function (h) 添加事件处理程序。 h 的第二个参数是一个对象,其以 "on" 开头的键被视为事件处理程序。例如,为click 事件和名为my-event 的事件添加处理程序:

import { h } from 'vue'

const comp = h(Component, {
  onClick: e => console.log('click', e),
  onMyEvent: e => console.log('my-event', e),
})
createApp(comp, props).mount(div)

demo 1

如果您的项目支持JSX,则等效为:

const comp = <Component onClick={e => console.log('click', e)}
                        onMyEvent={e => console.log('my-event', e)} />
createApp(comp, props).mount(div)

demo 2

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2019-10-15
    • 1970-01-01
    • 2020-08-26
    • 2021-06-24
    • 1970-01-01
    • 2020-03-27
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多