开发者问题收集

错误:无法读取未定义的属性(Vue)

2019-06-11
4214

我想将数据从一个组件传递到另一个组件。因此,第一个组件应该在数据更新时发出 BusEvent。调用了更新函数,但我总是在控制台中收到错误:更新钩子中的错误:“TypeError:无法读取未定义的属性‘$emit’”

另一个组件也没有收到高度/宽度。我在这里收到相同的错误:TypeError:无法读取未定义的属性‘$emit’。

我刚开始学习 vue,我不明白哪里出了问题。非常感谢您的帮助!

高度和宽度在组件一中初始化,所以这不是问题所在。

//Definition of EventBus in main.js file
export const EventBus = new Vue(); 

//First Component
import EventBus from '@/main.js'
export default {
  data: function () {
    return {    
      height: '',
      width: ''
    }
  },

  updated() {
    EventBus.$emit('emited', this.height, this.width);
  }
}


//Second Component
import EventBus from '@/main.js'
export default {
  data: function () {
    return {
      height: '',
      width: ''
    }
  },

  mounted() {
    const self = this
    EventBus.$on('emited', function (height, width) {
      alert('WORKS!')
      self.height = height
      self.width = width
    })
  }
}
1个回答
  1. EventBus 应像这样导入 import { EventBus } from '@/main.js'

  2. 如果您想通过 $emit 传递多个值,则应使用对象。

EventBus.$emit('emited', this.height, this.width);

替换为

EventBus.$emit('emited', {height: this.height, width: this.width});

然后对于侦听器:

EventBus.$on('emited', function ({height, width}) ...

Emīls Gulbis
2019-06-11