说明

vue项目中,当组件由引用时,父组件传给子组件的值可以由两种方法实现

方法一: 父组件像传输数据一样直接传方法给子组件
方法二: 利用VueComponent实例的 this.$emit()函数实现

应用

方法主要在子组件,父组件主要是入参不同和函数的内容不同,search1代表第一种方法以v-bind方式传递 search2代表第二种方法以v-on方式传递

父组件

1
2
3
4
5
6
7
8
<template>
<!-- searchPage1 方式直接v-bind传递方法到子组件,子组件props接收 -->
<!-- searchPage2 方式 v-on方式绑定到子组件,子组件 this.$emit使用 -->
<search-table
:searchPage1="searchUser"
@searchPage2="searchUserCallback"
></search-table>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
export default {
name:'User',
methods:{
searchUser(params){
return pageUser(params);
},
// 回调函数,查询分页列表使用的函数,后续添加查询,添加,删除等
searchUserCallback(params,callback){
pageUser(params).then((res)=>{
callback(res)
})
}
}
}

子组件

1
<el-button type="primary" icon="el-icon-search" @click="search" >搜索</el-button>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
export default{
props:{
//searchPage1 接收方法
searchPage1:{
type:Function,
default(){
return new Promise();
}
}
}
methods:{
search(){
this.search1()
//this.search2()
},
/*
* 请求格式 {page:1,size:10,name:null}
* 响应默认格式{code:200,data:{page:1,size:10,total,100,data:[]}}
* */
search1(){
//直接调用方法即可,
this.searchPage1(this.pageQuery).then(res=>{
let data = res.data;
this.pageQuery.total=data.total
this.tableData=data.data
})
},
search2(){
//调用绑定的事件
this.$emit('searchPage2',this.pageQuery, res =>{
let data = res.data;
this.pageQuery.total=data.total
this.tableData=data.data
})
},
}
}