uniapp超出页面栈的解决方法

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值