看来是Vue.js 2.0不会将事件从一个孙辈发送到他的孙辈组件.

Vue.component('parent', {
  template: '<div>I am the parent - {{ action }} <child @eventtriggered="performAction"></child></div>',
  data(){
    return {
      action: 'No action'
    }
  },
  methods: {
    performAction() { this.action = 'actionDone' }
  }
})

Vue.component('child', {
  template: '<div>I am the child <grand-child></grand-child></div>'
})

Vue.component('grand-child', {
  template: '<div>I am the grand-child <button @click="doEvent">Do Event</button></div>',
  methods: {
    doEvent() { this.$emit('eventtriggered') }
  }
})

new Vue({
  el: '#app'
})

这个JSFIDLE解决了问题https://jsfiddle.net/y5dvkqbd/4/,但通过执行两个事件:

  • 一个是从孙子到中间的部分
  • 然后再次从中间组件emits 到父级

添加这个中间事件似乎是重复和不必要的.有没有一种我不知道的直接向祖父母emits 的方法?

推荐答案

NEW ANSWER (Nov-2018 update)

我发现我们实际上可以通过利用grand child组件中的$parent属性来实现这一点:

this.$parent.$emit("submit", {somekey: somevalue})

更干净、更简单.

Vue.js相关问答推荐

Vue 3 范围滑块中的多个值

vue3 ssr 不返回纯 html

如果在 VueJS/VuetifyJS 中切换switch,则调用函数

如何在 vue 组件中定义变量? (Vue.JS 2)

如何从特定索引呈现 v-for

判断 vue-router.beforeEach 不限制对路由的访问

将检测外部点击自定义指令从 Vue 2 迁移到 Vue 3

如何将Vue的主应用程序渲染到body元素?

VueJS:向左,元素的顶部位置?

v-for 中的 VueJS 插槽

如何在 Vue 3 中使用 SSR

使用 Vee-Validate 在提交时验证子输入组件

Vuetify - 如何在 v-data-table 中单击时突出显示行

Laravel 中的 VueJS 组件实现中的鼠标悬停

Vue.js 处理多次点击事件

如何在生产模式下为 chrome 扩展启用 Vue devtools?

错误:Node Sass 尚不支持您当前的环境:Linux 64-bit with Unsupported runtime (88)

如何使用 Vue Test utils 测试输入是否聚焦?

Vue Cli 3:定义的输出路径

如何在 vuejs 中的基于类的组件中编写计算设置器