【uniapp】父子/兄弟组件的通信
前言:uniapp组件之间通信的方式与Vue相似
目录创建可以使用easycom规范,减少步骤,让组件创建更方便;
关于easycom规范,详见我的博客文章:
1.父组件给子组件传递数据
在父类写上准备传递的参数
// 父 index.vue 通过属性绑定进行传递 v-bind:简写为:
<test :title="title" ></test>
data() {
return {
title:'Hello',
}
},
在子组件代码行上引用
在子类props里定义接收参数
// 子组件 test.vue 通过props接收
<template>
<view>这是父组件传递过来的数据{{title}} </view>
</template>
export default {
props:['title'],//接收
}
2.子组件向父组件传值
通过$emit触发事件进行传递参数
需要首先在子类组件定义事件并写上触发事件
// 子组件 test.vue 传值num
<template>
<view>
子组件点击按钮触发给父组件传值
<button @click="sendNum">给父组件传值</button>
</view>
</template>
<script>
export default {
data() {
return {
num:'3',
};
},
props:['title'],//接收
methods:{
sendNum(){this.$emit('myEven',this.num) //给父组件传值
},
}
</script>
在父类引用标签上写上在子类$emit里面定义的方法名,以及接收方法
// index.vue 父组件接收num
<view class="content">
<test :title="title" @myEven= 'getNum'></test>{{num}}
</view>
export default {
data() {
return {
num:0,//默认0
}
},
methods: {
getNum(num){
console.log(num)
this.num = num
}
},
}
3.兄弟/平行组件传值
通过uni.$on注册一个全局监听事件,通过uni.$emit触发全局监听事件
//a组件 a.vue
<template>
<view><button @click="addNum">修改b组件数据</button></view>
</template>
<script>
export default {
methods:{
addNum(){
uni.$emit('changeNum',10) //触发全局变量自定义事件changeNum,该函数为b组件内修改b组件内容的方法 } } } </script>
&
//b组件 b.vue a组件更改该组件内容
<template>
<view>
数据{{num}}
</view>
</template>
<script>
export default {
data() {
return {
num:0,
};
},
created(){ //创建全局监听自定义事件 改变内容
uni.$on('changeNum',num=>{
this.num+=num
})
},
}
</script>
⚠tips:
1.父传子用props;子传父用$emit()
2.$emit、$on、$off常用于跨页面、跨组件通信
3.子组件可以定义插槽slot,让父组件自定义要显示的内容
版权声明:
作者:jenkin
链接:https://blog.ijenkin.top/index.php/2022/04/24/uniappfzxdzjdtx/
来源:Jenkin
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
文章目录
关闭
1
不错