likes
comments
collection
share

uniapp14-页面跳转和路由的使用实践

作者站长头像
站长
· 阅读数 23

uniapp14-页面跳转和路由的使用实践

在uniapp开发过程之中,我们经常会遇到需要进行页面跳转和页面传参的需求,这个时候如何解决呢,接下来我们就看看在页面的过程之中如何进行使用

跳转到 tabBar 页面只能使用 switchTab 跳转

1、uni.navigateTo

先来看看官方解释:保留当前页面,跳转到应用内的某个页面

简单说:就是跳转非 tabBar 的页面呗(tabar就是你下面的那几个小页面)

普通使用方法

//在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({
	url: '/pages/test'
});

携带参数跳转

如果我们想要携带一些参数呢

uni.navigateTo({
   url: '/pages/test?id=1&name=uniapp'
});

接收参数

// 在test.vue页面接受参数
export default {
    onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
            console.log(option.id); //打印出上个页面传递的参数。
            console.log(option.name); //打印出上个页面传递的参数。
    }
}

注意点

url有长度限制,太长的字符串会传递失败

跳转到 tabBar 页面只能使用 switchTab 跳转

2、uni.redirectTo

跳转并携带参数

uni.redirectTo({
  url: 'test?id=1'
});

接受参数

export default {
	onLoad: function (option) {
		console.log(option.id);
	}
}

3、uni.reLaunch

uni.reLaunch可以关闭所有页面,然后打开到应用内的某个页面

跳转并携带参数

uni.reLaunch({
	url: 'test?id=1'
});

接受参数

export default {
	onLoad: function (option) {
		console.log(option.id);
	}
}

4、uni.switchTab

需要注意,这个方法其实就是上面我说的那几个菜单tab栏目的

作用就是跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

比如我们pages.json页面是这么写的

{
  "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页"
    },{
      "pagePath": "pages/other/other",
      "text": "其他"
    }]
  }
}

我们使用的时候就是这样子的

uni.switchTab({
	url: '/pages/index/index'
});

5、uni.navigateBack

它的作用就是关闭当前页面,返回上一页面或多级页面,当我们需要返回几层的时候,可以通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

使用uni.navigateBack可以返回到原页面

(1)uni.navigateBack 返回

进去页面触发
onShow(async () => {
	getList(1); //利用学员编号进行展示
})
uni.navigateBack({  
//uni.navigateTo跳转的返回,默认1为返回上一级
	delta: 1
});
uni.redirectTo({
    url: '/pages/component/register/index'
});

(2)跳转方式对比

简单对比看看我们在几个页面跳转时候的方式

// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码

// 此处是A页面
uni.navigateTo({
	url: 'B?id=1'
});

// 此处是B页面
uni.navigateTo({
	url: 'C?id=1'
});

// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
	delta: 2
});

6、getCurrentPages的使用(uniapp监听从哪个页面来)

当我们在uniapp之中需要监听从哪个页面来的时候

var pages = getCurrentPages();//获取页面
var beforePage = pages[pages.length - 2];//上个页面
if(beforePage.route=='pages/component/myreport/index'){
    // 进行对应的操作 
}

配合我们的返回进行使用

uniapp监听页面顶部导航栏返回事件

<u-navbar title="测试" :custom-back="customBack"></u-navbar>
 methods: {
    customBack() {
      let routes = getCurrentPages()
      let lastPage = routes[routes.length - 2].route 
      // 页面栈中的最后一个项为当前页面,route属性为页面路径
      console.log(lastPage, 'routes')
      if (lastPage === 'pagesMine/pages/equityCard/myCard') {
        uni.navigateBack()
      } else {
        uni.navigateBack({
          delta: 2,
        })
      }
    }
  },

getCurrentPages().length // 监听是否是返回来的 在onShow生命周期函数中判断是否是通过左上角返回按钮返回的

getCurrentPages().length

大于1,则表示当前页面不是第一个页面,即用户是通过返回按钮返回的;

否则表示当前页面是第一个页面,即用户是通过路由跳转进入的。

转载自:https://juejin.cn/post/7388072384349306895
评论
请登录