Vue组件间传参:3种
示例: 组件图示结构如下:
一、父给子
方法一:props:[…]
如何 : 属性下行, 父组件将自己的模型变量保存在自定义属性中绑定给子组件。
适用于: 父组件传递的数据,在子组件中,也需要操作时(需要反复使用,计算等)
- 具体步骤:2步
1.在父组件中: template里的子组件开始标签中, 添加自定义属性, 让父组件将自己的模型变量保存在, 子组件的自定义属性中
</子组件名 :自定义属性="父组件的模型变量" ></子组件名>
建议 : 通常设置自定义属性名和父组件的变量名相同 !
- 在子组件中 :添加props属性 ,接收父组件数据 . 将父组件传递的自定义属性名,放进去.
props:["自定义属性名"]
使用 : 子组件中props中的自定义属性用法和data中的变量用法完全一样!
方法二:slot 插槽
如何 : 子组件中插槽显示什么内容, 由父组件对应卡片内容决定。
适用于: 父组件传递的数据,在子组件中,不需要操作(仅做展示内容使用)
- 具体步骤:2步
1.在父组件中:
template里的子组件的内容区域添加**“卡片和卡片内容”**
</子组件名> <template slot="卡片名">{{父组件模型变量}}</template> </子组件名>
**卡片名 😗*对应子组件的插槽名
**卡片内容 😗*就是{{}}里绑定的"父组件模型变量":
2.在子组件中 :template里内容, 需要值的位置, 添加 “插槽” ,等待接收父组件 “卡片”,用 父组件的**“卡片内容"替换子组件的"插槽”**
<li> <slot name="插槽名" ></solt> </li>
二、子给父
如何 : 事件上行, 父组件中的标签上定义自定义事件,在子组件中触发自定义事件,并传参。
- 具体步骤:2步
1.在父组件中:父需要在引用的子组件上,添加一个自定义的事件,并绑定父组件的一个处理函数
</子组件名 @父组件自定义事件名="父组件的一个处理函数"> </子组件名>
- 在子组件中: 绑定自己的事件处理函数, 在处理函数里面, 通过
this.$emit (" 父组件自定义事件名 ", 参数(子组件自己的变量) )
去触发父组件的自定义事件
三、兄弟之间传递
如何 : 通过公共的通信对象( Vue)实现
- 具体步骤:3步
1.建立一个公共的通信对象(new Vue()) : 保存事件 , 并关联到任何一个组件的处理函数上
//bus.js文件
import Vue from 'vue'
export default new Vue();
//main.js中引入,并添加进Vue的原型对象
import bus from './bus'
Vue.prototype.bus=bus;
-
数据的接收方组件 : 在自己加载完成后(created) ,向公共的通信对象上 , 添加一个自定义的事件. 事件名要绑定上自己的一个处理函数
注意:
①add_task :自定义事件名,绑定的是自己的一个add函数
②若写成this.add() ,回调函数里的this指的是window, 所以需要用bind替换一下 -
数据的发送方组件 : 在自己的事件处理函数中,找到公共的通信对象 , 用
this.$emit (" 数据的接收方组件组件自定义事件名 ", 参数(数据的发送方组件自己的变量) )
去触发数据接收方提前在公共的通信对象上绑定好的事件,并传参.