利用uni.addInterceptor可在onlaunch中引入
routingIntercept.js示例代码:
/** * @description 自定义路由拦截 */ // 白名单 const whiteList = [ '/', // 注意入口页必须直接写 '/' { pattern: /^\/pages\/list.*/ }, // 支持正则表达式 '/pages/grid/grid', '/pages/user-center/user-center', { pattern: /^\/pages\/login\/*/ } ] export default async function() { const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab'] // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器 list.forEach(item => { uni.addInterceptor(item, { invoke(e) { // 获取要跳转的页面路径(url去掉"?"和"?"后的参数) const url = e.url.split('?')[0] console.log('url', url) // 判断当前窗口是白名单,如果是则不重定向路由 let pass if (whiteList) { pass = whiteList.some((item) => { if (typeof (item) === 'object' && item.pattern) { return item.pattern.test(url) } return url === item }) } // 不是白名单并且没有token if (!pass && !getAuthorization()) { uni.showToast({ title: '请先登录', icon: 'none' }) uni.navigateTo({ url: "/pages/login/login" }) return false } return e }, fail(err) { // 失败回调拦截 console.log(err) } }) }) }app.vue
<script> import routingIntercept from '@/utils/routingIntercept.js' export default { globalData: { searchText: '' }, onLaunch: function() { // 对路由进行统一拦截,实现路由导航守卫 router.beforeEach 功能 routingIntercept() }, onShow: function() { console.log('App Show') }, onHide: function() { console.log('App Hide') } } </script> <style> /*每个页面公共css */ </style>
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?