在 Vue 中,子组件与父组件之间的通信需要使用 this.$emit () 方法。让我们首先回顾一下,父组件和子组件之间的通信使用了什么方法呢?#
1. 父组件向子组件传值:通过v-bind:的形式进行数据传递(也可以简写为冒号),然后子组件使用props来接收数据。
例如:
// 父组件
<todo-item v-bind:item="item"
v-bind:index="index"
v-for="(item,index) in list"></todo-item>
// 子组件
var TodoItemValue = {
props: ['item','index'],// 'item','index'是父组件通过v-bind传递的数据
template:"<li>{{item}}{{index}}</li>"
}
2. 子组件向父组件传值:这时候就需要使用this.$emit()方法了。
子组件向父组件传值的基本流程如下:#
第一步:在父组件中引入子组件#
- 使用 import 引入组件
import indexImportOrder from './components/indexImportOrder'
- 声明
//定义组件
components:{
indexImportOrder,
},
- 使用
<indexImportOrder ref="indexImportOrder"/>
第二步:子组件向父组件传值#
- 在子组件中,需要向父组件传值的地方使用 this.$emit ("function", param);
其中,function 是父组件中定义的函数,param 是需要传递的参数。
//新订单页面跳转
viewBusiness(){
let flag = false;
this.$emit('closeMain', flag);
},
- 在父组件中,子组件引用处添加函数 v-on="function1";
其中,function 是子组件中定义的函数,function1 是父组件中定义的函数,用于接收子组件传递的值并进行相应的数据处理,可以定义为相同的名称。
v-on 可以简写为 @,@function="function1",@是 v-on 的简写形式。
<indexImportOrder ref="indexImportOrder" v-on:closeMain="closeMain"/>
- val 即为子组件中的 flag,即接收到的子组件参数。
closeMain(val){
this.flag = val;
},