vue基础(3)—— 组件通信

1.父→子:在父级的标签里直接写需要传递给子级的值,子级通过props属性接收传递过来的值。

1 ) . 父组件内:将需要传递给子组件的值通过v-bind  (如果传递的是固定值,则不需要v-bind,直接属性名,属性值传递即可)。

vue基础(3)—— 组件通信_第1张图片
msg 则是传递给子组件的信息
vue基础(3)—— 组件通信_第2张图片
这是父组件需要传递的信息
父组件存储信息的位置

2) .子组件内:在对应的子组件中,通过props属性接收传递过来的值,并在子组件中使用该值。"注意:父组件向子组件传递的数据,子组件是不允许改变的"(单向数据流)

vue基础(3)—— 组件通信_第3张图片
vue基础(3)—— 组件通信_第4张图片
页面效果

子组件可以规定接收的类型:String、Object、Array、Number、Boolean

default为默认值

vue基础(3)—— 组件通信_第5张图片

2.子→父:父组件通过v-on:eventName="parentEventName"来设置监听,子组件通过$.emit('eventName')来触发事件。

1).子组件内:

vue基础(3)—— 组件通信_第6张图片

子组件内部,利用$emit发布一个自定义事件。第一个参数为:发布的事件名;第二个参数为子组件向父组件传递的数据。↓

vue基础(3)—— 组件通信_第7张图片

2).父组件内:

利用v-on(@)监听子组件的自定义事件

vue基础(3)—— 组件通信_第8张图片
vue基础(3)—— 组件通信_第9张图片
vue基础(3)—— 组件通信_第10张图片
父组件的数据

效果:当点击子组件的返老还童键,父组件的年龄就会减2。(每点击一下就会减一次2)

vue基础(3)—— 组件通信_第11张图片

3.兄弟组件通信

1)找共同的父级,先传给共同的父级,在由父级传给兄弟级。

2)事件总线Event Bus

new Vue 的实例上有两个方法:$on(监听事件)、$emit(发布事件),利用这样的方式,只要能访问到公用的实例,都可以随意的监听发布任意事件。例:

        兄弟级One和Two

vue基础(3)—— 组件通信_第12张图片
兄弟级One和Two

        当点击组件1「改名字」,组件2会将Jenny改为组件1传递过来的名字

vue基础(3)—— 组件通信_第13张图片

1> main.js文件里面,作为插件,创建新的实例

vue基础(3)—— 组件通信_第14张图片
$eventBus为自定义

2> 组件One

vue基础(3)—— 组件通信_第15张图片
点击事件
vue基础(3)—— 组件通信_第16张图片

3> 组件Two

vue基础(3)—— 组件通信_第17张图片

也可以直接访问根实例$root。

Event Bus的弊端:所有组件都可以改变数据,数据改变无规则,且无法调试,会造成数据混乱。(一般复杂的项目不建议使用)

4.跨级组件通信:Vuex(状态管理)

浅谈Vuex -

你可能感兴趣的:(vue基础(3)—— 组件通信)