前言
废话:
上篇文章写了对于 Vue 中的 props
👉props,讲述了概念、根本应用及留神点,在这篇文章中,咱们也会用到 props
和办法来让组件之间实现通信。
正题:
组件是 Vue 中十分重要的一个概念,也是模块化开发的根底。在应用 vue 的开发过程中,每个页面就是由多个不同的组件组合而成的。如下图:
既然有多个组件,就必须要做到数据的动态性,也要可能使多个组件之间可能通信。
组件之间的通信无疑是上面几种:
- 父子组件之间通信
- 祖孙组件之间通信(蕴含隔多代)
- 兄弟组件之间通信
本文大抵举出案例的有
- props 配合办法回调实现组件通信
- props 进行数据传递,自定义事件实现组件通信
我目前只学了这些哈,继续更新中,莫慌哈。
一、props 配合办法回调实现组件通信
咱们先初始化一个我的项目,之后的操作也都在这根底上进行操作,源码及相干我的项目代码都在文末仓库中。
删除些没用的,保留这些就够了。
需要:咱们须要在 HelloWorld
组件中削减一个按钮,点击之后可能批改父组件传过来的值,并展现进去。
理一下思路:
- 首先咱们不可能间接在子组件对值进行更改,这是 vue 所不容许的。
- 那么咱们实在的更改值的办法应该写在父组件中。
- 最初只有做到点击子组件按钮,可能调用到父组件的批改办法就算胜利拉。
那么第一步,咱们先在父组件中定义一个批改 msg 值的办法。
methods: {updateMsg () {this.msg = '大家好, 我是博主宁在春'}
}
定义好之后,咱们该如何传递给子组件呢? 从而让子组件可能调用到这个办法呢?
通过 Props
,在子组件中 prop
是能够接管函数类型的。
那么咱们就能够把咱们的函数传递给子组件。
<!-- :msg 是传递给子组件的值 子组件在 props 中写什么名称,这里就写什么名称
"msg" 是咱们本人定义的变量
办法同样如此
-->
<HelloWorld :msg="msg" :updateMsg="updateMsg"/>
在这里写了之后,咱们还须要去子组件中接管一下:
这样只算是接管实现了,最初要做的就是触发他拉。咱们给按钮绑定个点击事件就能够了。
<button @click="updateMsg"> 点击批改 msg 的值 </button>
这样子其实也是能够实现的。
然而这样局限性太大,咱们平时都是要传值的,那样才算通信丫,咱们略微更改下。
在 app 组件中,咱们将要接管一个值。
methods: {updateMsg (value) {this.msg = value}
}
在子组件中更改如下图:也能够实现同样的成果
上述是实现父子组件之间通信,那么如果是兄弟组件呢? 子孙组件呢?该如何呢?
因为代码非常简单,我不再反复操作了,做了几张图,帮忙大家了解。
二、props 搭配自定义事件实现组件通信
本文只是简略搭配应用下,并没有细讲自定义事件哈。有需要可看👉官网文档
说起来,这个 props 搭配自定义事件实现组件通信,要改变的中央蛮小哈。
1、第一步:把 App 组件中的绑定的办法名前的引号,改为 @
符号哈。
<HelloWorld :msg="msg" @updateMsg="updateMsg"/>
2、第二步:子组件也不必再在 props 中进行接管,另外调用父组件的形式也有一点变动。
如此也是能够实现跟第一种形式同样的成果的。
如果是父子组件,这种形式我感觉十分不便,不必再借助 props 来进行接管,可间接进行绑定。
然而对于祖孙组件之间的通信,依然是很麻烦的。得先传递到子组件能力再持续传递给孙子组件
子组件
而后才是孙子组件
兄弟组件也是像之前差不多的,这种形式比拟实用于父子组件通信,比拟适合。
后语
大家一起加油!!!如若文章中有不足之处,请大家及时指出,在此郑重感激。
纸上得来终觉浅,绝知此事要躬行。
大家好,我是博主
宁在春
:主页一名喜爱文艺却踏上编程这条路线的小青年。
心愿:
咱们,待别日相见时,都已有所成
。
组件通信形式还在写,挺多形式的,这只是最开始学的两种,重头戏还是得在后头。