uniapp监听服务器消息,事件的监听注册以及触发

> uniapp 提供了事件的监听注册以及触发,注册的事件都是 App 全局级别的,可以很方便的跨任意组件,页面,nvue,vue 等。

[TOC]

### 相关注册或触发函数

> 参考:https://uniapp.dcloud.io/api/window/communication

#### uni.$emit(eventName,OBJECT)

> 触发全局的自定事件。附加参数都会传给监听器回调。

#### uni.$on(eventName,callback)

> 监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数。

#### uni.$once(eventName,callback)

> 监听全局的自定义事件。事件可以由 uni.$emit 触发,但是只触发一次,在第一次触发之后移除监听器。

#### uni.$off([eventName, callback])

> 移除全局自定义事件监听器。

### 场景案例

> 我们假设一个场景,进入app,是未登陆状态,需要在我的页面点击登陆,进入登陆页面进行登陆。登陆成功之后,返回到我的页面,实时显示登陆后的用户信息。

#### 监听事件

> 在“用户中心“页面 监听事件。

> 因为事件监听是全局的,所以使用`uni.$on`,需要使用`uni.$off`移除全局的事件监听,避免重复监听。

~~~

点我登录

用户token:{{usnerInfo.token}},用户昵称:{{usnerInfo.nickName}}

export default {

data() {

return {

usnerInfo : null

}

},

onLoad() {

// 监听事件

console.log('on login....');

uni.$on('login',(uinfo)=>{

this.usnerInfo = uinfo;

})

},

onUnload() {

// 移除监听事件

console.log('off login....');

uni.$off('login');

},

methods: {

}

}

~~~

#### 触发事件

> 进入登陆页面,触发事件

> 使用`uni.$emit`触发事件后,对应的`uni.$on`就会监听到事件触发,在回调中去执行相关的逻辑。

~~~

登录

export default {

data() {

return {};

},

methods: {

login() {

// 假设用户登录成功,此时调用emit方法触发监听事件,刷新用户登录信息

uni.$emit('login', {

token: 'user123456',

nickName: 'wk123',

});

}

}

}

~~~

### 更多使用场景

> 以上只是一个简单的场景应用。而我们开发中会遇到很多页面间通讯场景,如:

* vue 与 nvue,nvue 与 vue 间的通讯

* tabbar 页面之间的通讯

* 父页面与多级子页面间的通讯

> 基本上述场景均可以实现,本质上就是一个页面通知另一个面我发生了变化,你需要处理一下。绝大部分页面的通讯都可以使用`uni.$emit`、`uni.$on`、`uni.$once`、`uni.$off`四个事件完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值