uniapp全局监听,页面修改页面 uni.$emit(),uni.on(),uni.off()

1.全局监听,页面修改页面 uni.$emit(),uni.on(),uni.off()

任一页面
<template>
    <view>
        <text>我是任一页面</text>
        <button type="warn" @click="globleEvent">全局事件订阅</button>
    </view>
</template>

<script>
    export default {
        methods:{
            globleEvent(){
                //全局事件订阅只要注册的页面都可以收到回调值
                uni.$emit("globleEvent","我是全局事件订阅的调用方法")
            }           
        }
    }
</script>
任二页面
<template>
    <view>
       <view>{{title}}</view>
      <view>{{content}}</view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                title:'任二页面初始状态',
                content:"此页面初始内容"
            };
        },
        onLoad() {
        	//结束上一次监听
        	uni.$off();
            //全局事件订阅,只要订阅了事件就可以收到值
            uni.$on("globleEvent",async (res)=>{
            	console.log(res);//我是全局事件订阅的调用方法
            	tihs.content = res;
               this.update()
            })
        },
        methods:{
            async update(res){
              //此时可以进行你的主页面的操作,调用某个方法等等
                this.title="被任一页面修改后的"
            }
        }
    }
</script>

2.子组件分发事件this. e m i t ( ) , t h i s . emit(),this. emit(),this.on()

组件
<template>
    <view>
        <text>我是test组件{{title}}</text>
        <button type="primary" @click="test">按钮传值回调</button>
         <button type="primary" @click="distribute">分发事件</button>
    </view>
</template>

<script>
    export default {
        data() {
            return {                
            };
        },
        props:{
            title:'',
            
        },
        methods:{
            test(){
                console.log("组件中的按钮点击事件")
                //触发子视图中的该事件方法
                this.$emit("testShowName",{name:"lele"})
            }, 
            distribute(){
            	this.$emit("my_events")
			}
        }
    }
</script>
整个流程

//使用test.vue组件
①首先要import导入组件
② components :{test} 注册组件
③组件使用的时候,可以自定义很多的属性,具体值设置在组件中的props属性对象中
④点击按钮触发方法逻辑流程如下
1)@click=“test” 组件中触发该方法时间
2)事件方法中触发, 使用该组件自定义的方法this.$emit(“testShowName”,{name:“lele”}), 去页面中查找该绑定方法,里面有对应的绑定事件
3)接着会触发@testShowName="testEvent"中的testEvent方法
4)紧接着就可以完成整个事件的流程了
testEvent(rel){
console.log(rel)
}

父页面
<template>
    <view>
        <view style="height: 200rpx;">
            <test 
                :title="title"
                @testShowName="testEvent"
            ></test>
        </view>
    </view>
</template>

<script>
    import test from "@/components/test/test.vue" //引入组建
    export default {
     components:{  
            test  //注册组建
        },
        data() {
            return {
                title:'lele'
            };
        },
        created() {
			this.$on('my_events', this.handleEvents)
		},
        methods:{
            testEvent(rel){
              //此时可以进行你的主页面的操作,调用某个方法等等
                console.log(rel)
            },
            handleEvents(){
              //此时可以进行你的主页面的操作,调用某个方法等等
            }
        }
    }
</script>

https://www.jianshu.com/p/9fcdba7638be

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值