Javascript 从子级到父级发出的事件不工作

Javascript 从子级到父级发出的事件不工作,javascript,vue.js,Javascript,Vue.js,sayHelloFromRoot方法驻留在根vue实例中,只包含一行: this.$emit('ontabselected', tab); 但只要我在选项卡之间切换,在vue devtools中我就会看到发出的事件,但在控制台中我看不到打印的hello。Answer 您应该收听上的事件,而不是,例如: sayHelloFromRoot(){ console.log('hello'); } 您不知道按钮如何触发事件,它被封装在按钮内。但是你知道它可以发出那个事件,你知道接口,你可以监听

sayHelloFromRoot
方法驻留在根vue实例中,只包含一行:

this.$emit('ontabselected', tab);
但只要我在选项卡之间切换,在vue devtools中我就会看到发出的事件,但在控制台中我看不到打印的hello。

Answer 您应该收听
上的事件,而不是
,例如:

sayHelloFromRoot(){
    console.log('hello');
}
您不知道按钮如何触发事件,它被封装在按钮内。但是你知道它可以发出那个事件,你知道接口,你可以监听它

如果事件在根目录中实现,则很难知道是哪个按钮。(谢谢@Ferrybig)

链接

为什么组件应该侦听自身发出的事件?父元素不应该是该事件的接收者吗?@Eisenheim检查更新的答案。如果我解释过,请告诉我enough@Eisenheim因为如果事件是在root@Ferrybig非常感谢。我明白了。只是官方文件让我如此确信,以至于我实际上忘记了最基本的东西。他们甚至有这样一句口号:“道具放下,活动起来”
sayHelloFromRoot(){
    console.log('hello');
}
<div>
  <tabs @ontabselected="sayHelloFromRoot">
    <tab></tab>
    <tab></tab>
  </tabs>
</div>
<!-- MyFile.vue -->
<div>
  <button @click="sayHello"/>
</div>
<div>
  <button onclick="console.log('Hello')"/>
</div>