【问题标题】:Vue.js $emit not being received by parent父级未收到Vue.js $emit
【发布时间】:2017-09-22 02:03:58
【问题描述】:

我很难弄清楚为什么以下代码代码不适用于子和父单页组件。

Child.vue

<script>
export default {
  name: 'ChildComponent',
  data () {
      return {}
  }
  mounted: function() {
      this.emitSignal()
  },
  methods: {
    emitSignal: function () {
      console.log('>>emitSignal()')
      this.$emit('my_signal')
    }
  }
}
</script>

父.vue

<template>
  <div>
        <child-component v-on:my_signal="doSomething"></child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
    name: 'ParentComponent',
    data () {
      return {
      }
    },
    components: {
      ChildComponent
    },
    methods: {
      doSomething: function () {
        console.log('doSomething')
      }
    }
  }
</script>

如果我运行应用程序,我看到子进程在控制台中发出信号 >>emitSignal(),但父函数 'doSomething' 没有运行。

知道我可能缺少什么吗?

注意,我还尝试了一个事件总线:https://alligator.io/vuejs/global-event-bus/,子级触发但父级再次没有拦截信号并运行指定的函数。

【问题讨论】:

  • 改用 this.$parent.$emit('my_signal')。

标签: javascript vue.js vuejs2


【解决方案1】:

您的 emit 代码很好,除了 Child.vue 中 data 块后缺少逗号

工作示例:https://jsfiddle.net/63t082p2/42/

<div id="app">
  <child v-on:my_signal="doSomething"></child>
</div>

new Vue({
    el: '#app',
    methods: {
    doSomething: function () {
      console.log('doSomething')
    }
  },
  components: {
    'child' : {
      mounted: function() {
          this.emitSignal()
      },
      methods: {
        emitSignal: function () {
          console.log('>>emitSignal()')
          this.$emit('my_signal')
        }
      }
    }
  }
});

【讨论】:

  • 谢谢我把你的小提琴分叉了(虽然它确实运行了相关的 console.log 行)控制台中有各种错误,我起初发现有点混乱jsfiddle.net/9qz1Lds3
  • @MemeDeveloper 谢谢你,在这两年里,Vue 似乎发生了一些变化 :)
  • 是的,当然 - 我确信很多事情都发生了变化,如果其他人找到这个答案并且像我一样觉得它有用的话。谢谢。 +1
猜你喜欢
  • 2019-04-05
  • 2019-08-28
  • 2020-08-07
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2020-06-21
相关资源
最近更新 更多