1、父组件将方法传给子组件
首先需要在父组件中定义一个方法如下:
<template>
<div>
<ntable
:getdata="getdata"
:setdata="setdata"
></ntable>
</div>
</template>
<script>
import ntable from '@/components/ntable'
export default {
data(){
return{
mockData:{
name:'张三',
age:'12'
}
}
},
components:{
ntable,
},
methods:{
getdata(){
return this.mockData;
},
setdata(data){
// do something
},
},
}
</script>
第一步:在methods中定义getdata()和setdata()方法
第二步:将方法传给子组件
第三步:子组件接收方法,如下:
<template>
<div>
<button @click="getParentData">调父组件的方法</button>
</div>
</template>
<script>
export default {
props:{ // 在props中接收父组件传过来的值
getdata:{
type:Function
},
setdata:{
type:Function
}
},
methods:{
getParentData(){
var data = [];
this.getdata(); // 父组件传过来的方法在这里调用
this.setdata(data);
},
}
}
</script>
至此,父组件传函数给子组件就已经完成了,至于里面做什么操作是根据业务来写的。
2、子组件将方法传给父组件
首先在子组件中定义一个方法,然后传给父组件,如下:
<template>
<div>
</div>
</template>
<script>
export default {
mounted(){
this.$emit('setTableData',this.setTableData);/* 向外暴露set方法 */
},
methods:{
setTableData(data){
// do something
},
}
}
</script>
我是通过$emit通知父组件,父组件监听setTableData函数拿到子组件传过去的函数
在父组件中如下:
<template>
<div>
<ntable
@setTableData="setableData"
></ntable>
</div>
</template>
<script>
import ntable from '@/components/ntable'
export default {
data(){
return{
actionFun:undefined,
}
},
components:{
ntable,
},
methods:{
setableData(data){
this.actionFun = data;
},
},
}
</script>
当子组件的函数通过$emit传到父组件中时,父组件通过setableData监听到函数,在data中声明一个变量接收一个这个函数,这样这个函数就可以在其他地方调用了。
注:能力有限,水平一般,欢迎大神指出不足,欢迎不明白的小伙伴留言讨论。