Root Vue实例未接收事件

时间:2019-06-22 19:25:54

标签: vue.js

我无法从根Vue实例的子组件接收任何事件。

我有一个简单的子组件,在单击或安装时会发出“ hello”事件:

<template>
  <div v-on:click="clicked"></div>
</template>

<script>
export default {
  name: 'ChildComponent',
  mounted() {
    this.$emit('hello');
  },
  methods: {
    clicked() {
      this.$emit('hello');
    }
  }
};
</script>

在我的Vue根实例中,我尝试了一切以接收事件,但是似乎没有任何处理程序正在接收该事件。我不确定自己在做什么错。

const comp = () => import('./components/SomeVueWhichHasChild.vue');

const v = new Vue({
  store,
  render: h => h(comp, {
    on: {
      hello: () => {
        console.log('VUE INSTANCE HELLO');
      }
    },
    nativeOn: {
      hello: () => {
        console.log('NATIVE HELLO');
      }
    }
  }),
});
v.$on('hello', () => {
  console.log('ON HELLO');
});

v.$mount('#app');

2 个答案:

答案 0 :(得分:0)

似乎是这样的重复:

How to bubble events on a component subcomponent chain with Vue js 2?

只有组件的直接父级可以侦听事件。我改用本机JS事件:

this.$el.dispatchEvent(new CustomEvent('hello', {
  detail: { ... },
  bubbles: true,
  composed: true
}));

答案 1 :(得分:0)

正如@Decade Moon所说,您的div应该具有一些内容,以便可以单击。例如:

<div v-on:click="clicked">Test content</div>

您可以在Codepen上查看我的演示