非父子组件,不相干组件间通讯,都可用自定义事件。
新建一个 event.js
import Vue from 'vue'
export default new Vue()
/* 这个js只干了一件事,就是返回一个vue实例 */
在 Input.vue 组件中
......
<script>
import event from './event.js'
export default {
......
methods: {
addTitle () {
this.$emit('add', this.title)
// 调用自定义事件
event.$emit('onAddTitle', this.title)
this.title = ''
}
}
}
</script>
在 List.vue 组件中
<script>
import event from './event.js'
export default {
...
methods: {
addTitle () {
// 调用父组件的事件
this.$emit('add', this.title);
this.title = '';
},
addTitleHandler (title) {
console.log('自定义事件:' + title);
}
},
mounted() {
// 绑定自定义事件
// 这里不使用 () => {} 是为了方便解绑
event.$on('onAddTitle', this.addTitleHandler);
},
beforeDestroy() {
// 及时销毁(解绑自定义事件),否则可能会造成内存泄露
event.$off('onAddTitle', this.addTitleHandler);
}
}
</script>