uniapp 跳转页面保存和刷新 拦截器的使用

项目需要在 tab 导航切换的时候,不刷新列表,正常使用,在帖子列表页的时候,我们点击帖子详情,跳转回来还是不刷新。

保存

tab页我们正常配置使用就好,我们跳转去详情和使用:

			detail(item) {
				uni.navigateTo({
					url: "./postDetail?id=" + item.id
				})
			},

不关闭当前页,并跳转,我们返回的时候使用:

				uni.navigateBack({
					delta: 1
				})

或者直接使用uniapp 里的头部导航栏的返回按钮。

刷新

现在有新的需求,我们再详情页也能会删除属于自己的帖子,这样我们返回上一级的时候就需要刷新列表数据,有一个比较好的交互

跳转详情还是同上即可,这样只需要修改比较少的代码

我们跳转返回的时候使用:

uni.switchTab({
    url: '/pages/technical_skills/index',
    success(){
        let page = getCurrentPages().pop(); //跳转页面成功之后
        if (!page) return; 
            page.onLoad(); //如果页面存在,则重新刷新页面
        }
});

在 跳转 的回调 success 中重新刷新该页面,来达到刷新数据的效果。

注:只能跳转到 tabBar 页面,并会关闭其他所有非 tabBar 页面。如果页面调用了 uni.preloadPage(OBJECT) (opens new window)不会关闭,仅触发生命周期 onHide

拦截器

可能大家会想到路由守卫,但是在uniapp 是使用拦截器代替:

需要拦截的跳转

let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];

添加拦截

list.forEach(item => { //用遍历的方式分别为4个路由方法添加拦截器
		uni.addInterceptor(item, {...})
    })

{}中的参数

参数名类型必填默认值说明平台差异说明
invokeFunction拦截前触发
successFunction成功回调拦截
failFunction失败回调拦截
completeFunction完成回调拦截

例子:

uni.addInterceptor('xxxxxx', {
  invoke() {
  },
  success() {
  }, 
  fail() {
  }, 
  complete() {
  }
})

但是这个方法也是没有vue中路由守卫那么灵活,可以给每个页面设置了

参考文档:uni.addInterceptor(STRING, OBJECT) | uni-app官网 (dcloud.net.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值