1.因为uniapp设置有栈的限制 最多保存十个页面 超出后在进行跳转就会失效 下面看代码操作
在uniapp中的vue入口文件中使用全局数据globalData进行缓存页面栈使其成为一个数组
globalData:{
pageList: ['/pages/index/index']
}
2. 每个页面路由进行进栈的时候就保存页面 只有这里只写了 uni.navigateTo的方法想使用别的也可以写进来 这边是单独设置了混入
const MAX_PAGE_SIZE = 10;//页面栈最大为10
export const homeMixin = {
methods: {
// 返回上一级
goback() {
uni.navigateBack(
{
delta: 1
}
);
},
gohome() {
this.navigateTo( '/pages/index/index');
},
navigateTo(pageUrl) {
// 如page列表已到达上限, 将页面push到app.pageList中, 当前页面redirectTo到新页面
const pageSize = getCurrentPages().length
/*
getCurrentPages() 函数用于获取当前页面栈的实例,
以数组形式按栈的顺序给出,
数组中的元素为页面实例,第一个元素为首页,最后一个元素为当前页面
*/
if (pageSize < MAX_PAGE_SIZE) {
//页面栈小于10就进行进栈操作
uni.navigateTo({url: pageUrl});
} else {
//大于10就进行 当前关闭页面 进入下个页面
uni.redirectTo({url: pageUrl})
}
getApp().globalData.pageList.push(pageUrl)
},
//这个是进行返回上一个页面的操作
navigateBack() {
// 如果page stack中页面数小于app.pageList中数目 => 将app.pageList中页面pop出去, 当前页面redirect到pop出来的url
if (getCurrentPages().length < getApp().globalData.pageList.length) {
const pageList = getApp().globalData.pageList
pageList.pop()
const url = pageList[pageList.length - 1]
uni.redirectTo({url: url});
} else {
// 如果两个数目一致, app.pageList pop, 当前页面navigateBack
getApp().globalData.pageList.pop();
uni.navigateBack()
}
}
}
}
3.在页面中进行使用 用的是mixins混入 直接使用方法
<script>
import {homeMixin} from "@/mixin/home";
export default {
mixins:[homeMixin],
//使用的时候 直接使用方法就行
method:{
toCart(e) {
this.navigateTo('/pages/cart/cart?id=' + e);
},
gosearch(){
this.navigateTo('/subpackages/search/search');
},
}
}
</script>