非父子组件,不相干组件间通讯,都可用自定义事件

新建一个 event.js

  1. import Vue from 'vue'
  2. export default new Vue()
  3. /* 这个js只干了一件事,就是返回一个vue实例 */

在 Input.vue 组件中

  1. ......
  2. <script>
  3. import event from './event.js'
  4. export default {
  5. ......
  6. methods: {
  7. addTitle () {
  8. this.$emit('add', this.title)
  9. // 调用自定义事件
  10. event.$emit('onAddTitle', this.title)
  11. this.title = ''
  12. }
  13. }
  14. }
  15. </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>

截屏2020-10-16 下午8.01.08.png