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)
	}
})
经验分享 程序员 微信小程序 职场和发展