Vue 组件通信

作者: Nian糕 | 来源:发表于2020-05-11 10:28 被阅读0次
Unsplash
  • 父组件通过 props 给子组件传值
// App.vue 父组件
<List :list="list" />

data() {
  return {
    list: [
      {
        id: 'id-1',
        title: 'title-1'
      },
      {
        id: 'id-2',
        title: 'title-2'
      }
    ]
  }
}
// List.vue 子组件
<ul>
  <li v-for="item in list" :key="item.id">
    {{item.title}}
    <button>删除</button>
  </li>
</ul>

props: {
  // 用来接收父组件传给子组件的数据
  list: {
    type: Array,
    default() {
      return []
    }
  }
}
  • 子组件通过 vm.$emit(event, arg) 触发父组件事件
// App.vue 父组件
<Input @add="addHandler"/>
<List :list="list" @delete="deleteHandler"/>

methods: {
  addHandler(title) {
    this.list.push({
      id: `id-${Date.now()}`,
      title
    })
  },
  deleteHandler(id) {
    this.list = this.list.filter(item => item.id !== id)
  }
}
// List.vue 子组件
<ul>
  <li v-for="item in list" :key="item.id">
    {{item.title}}
    <button @click="deleteItem(item.id)">删除</button>
  </li>
</ul>

methods: {
  deleteItem(id) {
    // 调用父组件的事件
    this.$emit('delete', id)
  }
}
// Input.vue 子组件
<input type="text" v-model="title"/>
<button @click="addTitle">添加</button>

methods: {
  addTitle() {
    // 调用父组件的事件
    this.$emit('add', this.title)
    this.title = ''
  }
}
  • 其他组件通过 vm.$on( event, fn ) 进行通信,实例一个 Vue 实例 event 作为媒介,在要相互通信的组件中引入 event
// event.js
import Vue from 'vue'

export default new Vue()
// Input.vue
methods: {
  addTitle() {
    // 调用父组件的事件
    this.$emit('add', this.title)
    // 调用自定义事件
    event.$emit('onAddTitle', this.title)
    this.title = ''
  }
}
// List.vue
methods: {
  addTitleHandler(title) {
    console.log('on add title', title)
  }
},
mounted() {
  // 绑定自定义事件
  event.$on('onAddTitle', this.addTitleHandler)
},
beforeDestroy() {
  // 及时销毁,否则可能会造成内存泄漏
  event.$off('onAddTitle', this.addTitleHandler)
},
运行结果

该章节的内容到这里就全部结束了,源码我已经发到了 GitHub Vue-Communication 上了,有需要的同学可自行下载

End of File

行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下喜欢关注,为了我能早日成为简书优秀作者献上一发助攻吧,谢谢!^ ^

相关文章

  • vue组件之间通信

    vue 组件之间通信 vue组件之间通信方式: 1.父组件通过props向下传数据给子组件,子组件通过$emit事...

  • 【Vue】组件通信(任意通信)

    本节所需的基础知识: 【Vue】组件通信(父传子props) 【Vue】组件通信(子传父$emit) 任意组件相互...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • Vue组件通信

    Vue组件通信 Vue组件关系可分为三大类: 父子组件 兄弟组件 跨级组件, 相应的组件之间的通信也分类三大类: ...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue组件通信(传值)

    1.父子通信 1.父组件(parent.vue) 子组件(child.vue) 2.子父通信 1.子组件(chil...

  • Vue组件通信

    总体来说,Vue中组件之间的通信场景如下图: 可以将其分为父子组件通信、兄弟组件通信、跨级组件通信。 1. 自定义...

网友评论

    本文标题:Vue 组件通信

    本文链接:https://www.haomeiwen.com/subject/embknhtx.html