/**vue2
import addInterceptor from '@/addInterceptor.js'
addInterceptor((to, from, next)=>{
console.log(to, '----to----')
console.log(from, '----from----')
next()//继续跳转
next(()=>{//重定向跳转
uni.navigateTo({
url:'/pageA/home/info?b=b100'
})
})
},{
global:Vue,//全局的
globalObject:Vue.prototype,
routerVariable:['path','meta','name','needLogin'],//路由展示的参数
indexPath:'/pages/index/index'//默认的首页
})
// 页面获取信息:
this.$Route
***/
/**vue3
import addInterceptor from '@/addInterceptor.js'
addInterceptor((to, from, next)=>{
console.log(to, '----to----')
console.log(from, '----from----')
next()//继续跳转
next(()=>{//重定向跳转
uni.navigateTo({
url:'/pageA/home/info?b=b100'
})
})
},{
global:app,//全局的
globalObject:app.config.globalProperties,
routerVariable:['path','meta','name','needLogin'],//路由展示的参数
indexPath:'/pages/index/index'//默认的首页
})
// 页面获取信息:
import {getCurrentInstance } from 'vue'
import {onLoad} from '@dcloudio/uni-app';
setup(props, context) {
const {proxy}=getCurrentInstance()
onLoad(()=>{
console.log(proxy.$Route)
})
return {
}
}
***/
import defaultPage from '@/pages.json'
export default function addInterceptor(cb, obj) {
const {
global,
routerVariable = ['path'],
indexPath,
globalObject = null
} = obj
if (routerVariable.indexOf('path') == -1) routerVariable.push('path')
const pageObject = {
id: 0
}
let isNextTo = false; //是否拦截
let toType = '' //拦截类型
let toDdteil = {} //拦截的具体信息
let setTimeoutL = null
const {
routerArray,
tabBarList
} = getRouterArray() //路由信息
// 挂载统一方法
global.mixin({
onShow() {
pageObject.id = new Date().getTime() + '_' + parseInt(Math.random() * 10000)
}
})
if (globalObject) {
// 获取页面
globalObject.$Route = {}
Object.defineProperty(globalObject, '$Route', {
get() {
const pages = getCurrentPages();
let thisPage = null
let lastPage = {}
try {
// #ifdef H5
lastPage = pages[pages.length - 1]
thisPage = lastPage ? (lastPage.__page__ || {
fullPath: lastPage.$page.fullPath
}) : {
fullPath: indexPath
}
// #endif
// #ifndef H5
lastPage = pages[pages.length - 1]
thisPage = {
fullPath: lastPage.$page ? lastPage.$page.fullPath : indexPath
}
// #endif
} catch (e) {
thisPage = {
fullPath: indexPath
}
}
const thisObj = getUrlData(thisPage.fullPath)
const toData = routerArray.find(n => n.path == thisObj.url)
toData.query = thisObj.obj
return toData
}
})
}
// callback
function cbFn(toDetail, fromDetail) {
toDetail.path = toDetail.path.slice(0, 1) != '/' ? ('/' + toDetail.path) : toDetail.path;
fromDetail.path = fromDetail.path.slice(0, 1) != '/' ? ('/' + fromDetail.path) : fromDetail.path;
const toObject = routerArray.find(n => n.path == toDetail.path);
if (tabBarList.indexOf(toDetail.path) != -1) {
toObject.isTabBar = true
}
const fromObject = routerArray.find(n => n.path == fromDetail.path);
if (tabBarList.indexOf(fromDetail.path) != -1) {
fromObject.isTabBar = true
}
cb(Object.assign({}, toDetail, toObject), Object.assign({}, fromDetail, fromObject), next)
}
// 继续跳转
function next(toPage=null){
if(toPage){
// #ifdef H5
if(!isNextTo){
history.back()
}
// #endif
setTimeout(()=>{
toPage()
},0)
}else{
isNextTo=true
if(toType!=''){
setTimeout(()=>{isNextTo=false},100)
}else{
isNextTo=false
}
}
}
// 获取当前页面信息
function thisPageFn(type = 0) {
return new Promise((r, _) => {
const pages = getCurrentPages();
let prvPage = null
let lastPage = {}
try {
// #ifdef H5
lastPage = pages[pages.length - 1]
prvPage = lastPage ? (lastPage.__page__ || {
url: lastPage.$page.fullPath
}) : {
url: indexPath
}
// #endif
// #ifndef H5
lastPage = pages[pages.length - 1]
prvPage = {
url: lastPage.$page ? lastPage.$page.fullPath : indexPath
}
// #endif
} catch (e) {
prvPage = {
url: indexPath
}
}
if (type == 0) {
pageObject.prvPage = prvPage
r(true)
} else {
r(prvPage)
}
})
}
// 获取页面路由
function getRouterArray() {
const {
pages,
subPackages,
tabBar
} = defaultPage;
const routerArray = [];
function forFn(pageArray, root = '') {
pageArray.forEach(item => {
const itemObje = {};
routerVariable.forEach(ele => {
if (item[ele]) {
itemObje[ele] = ele == 'path' ? (root + '/' + item[ele]) : item[ele]
}
});
routerArray.push(itemObje)
})
}
forFn(pages);
subPackages.forEach(item => {
forFn(item.pages, '/' + item.root)
});
let tabBarList = tabBar ? tabBar.list : [];
tabBarList = tabBarList.map(item => '/' + item.pagePath);
return {
routerArray,
tabBarList
}
}
// 获取参数
function getUrlData(url, variable) {
let urlValue = url;
if (urlValue == '/') {
urlValue = indexPath
}
if (!urlValue || urlValue == '') return;
var vars = [];
var queryArray = urlValue.split('?');
var query = queryArray.length > 1 ? queryArray[1] : '';
vars.push(...query.split('&'));
vars = vars.filter(n => n != '');
const queryObject = {};
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
queryObject[pair[0]] = pair[1]
}
if (variable) {
if (queryObject[variable] && queryObject[variable] != '') {
return {
url: queryArray[0],
obj: queryObject[variable]
}
} else {
return false
}
} else {
return {
url: queryArray[0],
obj: queryObject
}
}
}
// 监听APi跳转
function watchRouter(res, type) {
toType = type
toDdteil = res
const pages = getCurrentPages();
let thisPage = pages[pages.length - 1]
let to = res
let from = {}
// #ifdef H5
from = thisPage.__page__ || {
url: thisPage.$page.fullPath
}
// #endif
// #ifndef H5
try {
from = {
url: thisPage.$page.fullPath
}
} catch (e) {
from = {
url: indexPath
}
}
// #endif
if (type == 'navigateBack' || res.from == "backbutton") {
let num = 1
if (toDdteil.from == "backbutton") {
num = 1
}
if (toDdteil.delta) {
num = toDdteil.delta
}
// #ifdef H5
to = pages[pages.length - (1 + num)].__page__ || {
url: pages[pages.length - (1 + num)].$page.fullPath
}
// #endif
// #ifndef H5
to = {
url: pages[pages.length - (1 + num)].$page.fullPath
}
// #endif
}
const toDetail = {
path: to.route || getUrlData(to.url).url,
query: to.options || getUrlData(to.url).obj
}
const fromDetail = {
path: from.route || getUrlData(from.url).url,
query: from.options || getUrlData(from.url).obj
}
cbFn(toDetail, fromDetail)
}
// 监听url变化,非api跳转
Object.defineProperty(pageObject, 'id', {
set(newValue) {
if (setTimeoutL) clearTimeout(setTimeoutL)
setTimeoutL = setTimeout(async () => {
try {
if (!isNextTo) {
const pages = getCurrentPages();
let thisPage = null
// #ifdef H5
thisPage = pages[pages.length - 1].__page__ || {
url: pages[pages.length - 1].$page.fullPath
}
// #endif
// #ifndef H5
thisPage = {
url: pages[pages.length - 1].$page.fullPath
}
// #endif
const toDetail = {
path: thisPage.route || getUrlData(thisPage.url).url,
query: thisPage.options || getUrlData(thisPage.url).obj
}
if (!pageObject.prvPage
uniapp路由拦截,uniapp使用addInterceptor路由拦截(vue2 OR vue3)
5星 · 超过95%的资源 需积分: 1 191 浏览量
2023-04-06
16:55:20
上传
评论 1
收藏 7KB ZIP 举报
寒墨茗殇
- 粉丝: 101
- 资源: 19
最新资源
- 旅行活动的微信小程序页面
- 第三节课,后端代码优化 & 结束
- 基于matlab实现的10自由度齿轮传动系统动力学模型,通过调用ode45进行求解,考虑了轴承刚度和阻尼.rar
- 基于matlab实现齿轮系统非线性动力学模型和动力学求解 齿轮非线性动力学研究.rar
- 基于matlab实现的 流体力学有限元NS方程,有限元离散,得到速度场、压力场,流体力学.rar
- 基于matlab实现的GROWTH2.0是一个地球物理反演工具
- 基于matlab实现的matlab法求解椭圆轴承支承的刚性jeffcott转子的振动方程
- 基于matlab实现的sfs算法对目标的多角度图像进行三维重构.rar
- 基于matlab实现的VRPWT离散粒子群优化解决带时间窗的车辆路径问题.rar
- 基于matlab实现的齿轮系统非线性动力学模型和动力学求解 齿轮非线性动力学研究.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页