【uniapp】父子/兄弟组件的通信

前言:uniapp组件之间通信的方式与Vue相似

目录创建可以使用easycom规范,减少步骤,让组件创建更方便;

关于easycom规范,详见我的博客文章:

【uni-app】 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
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录