uni-app—拦截处理(可拦截tabbar切换)
官方文档:
uni-app 提供了uni.addInterceptor()拦截器主要用于:
1. 拦截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)
}
})
2. 一些原生调起操作(如访问相册等操作权限前获取当前设备是否授权来来处理相应操作)
可参考:
3. 比较常见的场景:
如未登录时跳转其他页面都会跳转到登录页让用户先登录
常用的实现方法可能是在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)
}
})
