uniapp路由拦截二级页面方法

  • 目录结构

    ├── utils                      		
    │   └── routingIntercercept.js   # 路由拦截器
    └── App.vue     
    
  • uniapp中的拦截器 uni.addInterceptor()

一、定义路由拦截器

  • 在 utils 文件夹中,创建 routingIntercercept.js 文件

    /* 设置页面白名单,白名单中的页面不做拦截 */
    // 页面白名单(一级和登录页面)  
    const whiteList = [
    	'/pages/tabbars/home',
    	'/pages/tabbars/mine',
    	'/pages/the-login/the-login'
    ]
    
    export default {
    	init() {
            /* 我只拦截二级页面,所以relaunch和switchTab在这里不做拦截 */
    		const list = ['navigateTo', 'redirectTo'] 
    		list.forEach(item => { // 遍历list为路由方式添加拦截器
    			uni.addInterceptor(item, {
    				invoke(e) { // 页面跳转前拦截
    					console.log(e);
    					// 去除url中'?'及后面的参数
                        /* 按'?'拆分成字符串数组,取第一个元素(去掉分隔符及分隔符后的)*/
    					const url = e.url.split('?')[0]
    					// 判断在白名单中,不拦截 (有则返回true,无则返回false)
    					const approve = whiteList.includes(url)
    					// console.log(approve)
    					if (approve) {
    						return e
    					} else {
    						console.log('不在白名单中')
                          	/* 若要赋值并使用Storage中的值,必须使用getStorageSync */
    						// 获取用户Token
    						const token = uni.getStorageSync('userToken')
    						// 判断无token,拦截
    						console.log(token)
    						if (token.length === 0) {
    							uni.showToast({
    								title: '请先登录',
    								icon:"none"
    							})
                                /* 延迟跳转页面,解决提示在真机中一闪而过 */
    							setTimeout(() => {
    								uni.hideToast();
    								// 关闭提示后跳转登录
    								uni.navigateTo({
    									url: '/pages/the-login/the-login'
    								})
    							},1200)
    							return false
    						} else {
    							return e
    						}
    					}
    				},
    				fail(err) { // 失败回调拦截
    					console.log(err)
    				}
    			})
    		})
    	}  
    }
    

二、使用拦截器

  • 在 App.vue 文件的 onLaunch 方法中调用

    <script>
    	import routingIntercept from '@/utils/routingIntercept.js'
    	export default {
    		onLaunch: function() {
    			console.log('App Launch')
                // 路由拦截
    			routingIntercept.init()
    		},
    		onShow: function() {
    			console.log('App Show')
    		},
    		onHide: function() {
    			console.log('App Hide')
    		}
    	}
    </script>
    
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值