uniapp登陆后从login页面跳转到tabBar页面不触发tabBar页面生命周期
在使用uniapp开发微信小程序项目遇到个问题,在用户退出登录时清除本地所有缓存之后,跳转到login页面
再使用其他账号登录后,使用uni.switchTab()
跳转回tabBar页面时,不会触发页面的生命周期,导致页面数据还是显示上个账号的数据,不会重新加载。
后来发现在tabBar
页面中并不会每次切换或显示都会触发页面的onLoad
。
在网上查到的大部分方法都是使用getCurrentPages()
获取到页面栈的实例
const pages = getCurrentPages()
const perpage = pages[pages.length - 1]
perpage.onLoad()
但是实际使用会发现,这种做法仅适用于更新上个页面
的数据,如果我有多个tabBar
页面是无法触发所有页面的onLoad()
于是改为如下代码
uni.$emit(eventName,OBJECT)
:触发全局的自定义事件,附加参数都会传给监听器回调函数
uni.$on(eventName,callback)
:监听全局的自定义事件,事件由 uni.$emit 触发,回调函数会接收事件触发函数的传入参数。
在登录成功的回调中
uni.$emit("loginSuccess", true)
在所有的tabBar页面的onLoad
中
onLoad() {
this.load() //在load中调用初始化需要的方法
uni.$on("loginSuccess",(res)=>{
this.load() //监听到登录成功之后重新初始化(任何页面执行 uni.$emit("loginSuccess", true) 后会就触发)
})
},