页面路由
类似HTML中的 <a>
组件,但只能跳转本地页面。目标页面必须在pages.json中注册
自带方法
- uni.navigateTo
保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack
可以返回到原页面。url有长度限制,太长的字符串会传递失败,可改用窗体通信、全局变量,另外参数中出现空格等特殊字符时需要对参数进行编码。
- uni.redirectTo
关闭当前页面,跳转到应用内的某个页面
- uni.reLaunch
关闭所有页面,打开到应用内的某个页面。如果调用了 uni.preloadPage(OBJECT)不会关闭,仅触发生命周期 onHide
- uni.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。如果调用了 uni.preloadPage(OBJECT)不会关闭,仅触发生命周期 onHide
- uni.navigateBack
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。(调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。)
- uni.preloadPage
预加载页面,是一种性能优化技术。被预载的页面,在打开时速度更快
简单封装
var utils = {};
//公共处理方法
utils.install = function(Vue, option) {
// 页面跳转
Vue.prototype.jump = function(path) {
uni.navigateTo({
url: path
})
};
// 返回
Vue.prototype.back = function(obj) {
uni.navigateBack(obj);
};
// 带参跳转
Vue.prototype.togo = function(url,data){
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
uni.navigateTo({
url
})
};
function param(data) {
let url = ''
for (var k in data) {
let value = data[k] !== undefined ? data[k] : ''
url += '&' + k + '=' + encodeURIComponent(value)
}
return url ? url.substring(1) : ''
};
// 获取登录用户
Vue.prototype.getUserInfo = function() {
let res = uni.getStorageSync('userInfo');
if (res) {
return res
} else {
return {}
}
};
};
export default utils;
项目使用
1、在 main.js
中use一下就可以在页面用了
import utils from './common/util.js'
Vue.use(utils)
2、携带 userid
跳转到 order 页面
togoOrderList(userid) {
this.togo('/pagesOther/personal/order',{userId: userid})
}
路由总结
- App平台仅支持预加载 nvue 页面,执行页面预渲染,预载时触发生命周期
onLoad
,onReady
,不触发onShow
- 打开新页面时,url 完全相同(包含参数)时,优先使用预加载页面,触发生命周期 onShow
- tabbar页面,仅支持预加载尚未显示过的页面,否则返回 fail,提示 already exists
- 同一时间,相同 url 仅 preloadPage 一次
- 当同一个预载页面已被打开(在路由栈),再次打开相同url时,不再使用该预加载页面,而是打开新的非预载页面
uni.reLanuch
,uni.switchTab
,uni.navigateBack
(含Android返回键) 切换页面时,预加载页面不会被销毁,仅触发生命周期onHide
- 在预载页面使用
uni.redirectTo
时,预加载页面会被销毁,触发生命周期onUnload