拦截器之可拦截tabbar切换
大约 1 分钟
拦截器之可拦截tabbar切换
官网文档:uni.addInterceptor(STRING, OBJECT) | uni-app官网
uni-app 提供了uni.addInterceptor()拦截器主要用于:
- 拦截api请求
uni.addInterceptor('request', {
invoke(args) {
// request 触发前拼接 url
args.url = 'https://www.example.com/'+args.url
},
success(args) {
// 请求成功后,修改code值为1
args.data.code = 1
},
fail(err) {
console.log('interceptor-fail',err)
},
complete(res) {
console.log('interceptor-complete',res)
}
})
- 一些原生调起操作(如访问相册等操作权限前获取当前设备是否授权来来处理相应操作)
- 比较常见的场景:
如未登录时跳转其他页面都会跳转到登录页让用户先登录
常用的实现方法可能是在uni.navigateTo等路由跳转前去判断用户是否登录,或者是
在打开页面后的onShow()里面去判断用户是否登录,未登录时uni.redirectTo()回到登录页
如果页面使用tabbar 想切换tabbar的时候去判断就可以使用uni.addInterceptor来实现
例子:
// 页面拦截tabbar,非登录状态页首页跳转登录页登录
uni.addInterceptor('switchTab', {
// tabbar页面跳转前进行拦截
invoke (e) {
if (!uni.getStorageSync('STORAGE_KEY_TOKEN') && e.url!="/pages/login/login" && e.url!="/pages/homepage/homepage") {
uni.redirectTo({
url: '/pages/login/login'
});
return false
} else{
return true
}
},
success (e) {
// console.log(e)
}
})