今天开发一个钉钉H5项目的时候,发现进入页面了,但用户却还未登录,没有请求到数据,因此需要做的就是等用户自动化登录完时进行页面刷新,但采用了js原生的刷新网页,会造成项目不断初始化,一直刷新,项目会重新打开。
原因是什么呢,是因为js的刷新当前页会初始化项目,触发App.vue的onLaunch函数,又由于我的项目自动登录是写在onLaunch函数中,造成登陆成功后会一直重新打开项目,形成死循环因此采用了uniapp的页面通讯方法解决。
如下:
App.vue页面
onLaunch: function() {
//登录逻辑
if(自动登录成功){
//在这里抛出一个事件
uni.$emit('login','1')
}
}
index.vue页面
在onLoad或者onShow生命周期中写
onShow() {
uni.$once('login', e => {
if(e == 1){
//代码逻辑
}
})
},
uni.$once这个是监听全局的自定义事件。事件可以由 uni.$emit 触发,但是只触发一次,在第一次触发之后移除监听器。uni.$on是监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数。他默认一直监听因此在不需要监听的时候需要用uni.$off进行移除