1. Uniapp路由介绍
Uniapp作为一个开发框架,自然需要在开发中完成页面间的跳转。在Uniapp中,提供了一套完整的路由管理方案,支持多种类型的跳转操作。
Uniapp路由管理主要包括以下三个部分:
1.1 页面注册
在Uniapp中,第一件事情是需要将页面注册到路由管理器中,这样才能够进行页面的跳转。页面注册包含页面的路径、页面名称以及页面的别名。
uni.addPage({
path: '/pages/home/home',
name: 'home',
alias: '/'
});
其中,path表示页面路径,name表示页面名称,alias表示页面别名。同一个页面可以设置多个别名,好处是可以通过多个路径访问同一个页面。
1.2 页面跳转配置
Uniapp支持多种类型的页面跳转操作,如前进、后退、重定向等。同时,也支持传参、获取参数等操作。下面是一些常用的页面跳转操作:
前进:
uni.navigateTo({
url: '/pages/index/index'
});
在进行页面前进时,需要使用navigateTo方法。其中,url表示目标页面的地址。
后退:
uni.navigateBack();
在进行页面后退时,需要使用navigateBack方法。该方法不需要传参。
重定向:
uni.redirectTo({
url: '/pages/login/login'
});
在进行页面重定向时,需要使用redirectTo方法。该方法与navigateTo方法类似,只是在跳转过程中不保留当前页面,而是直接替换为目标页面。
传参:
uni.navigateTo({
url: '/pages/user/user?id=123456&name=张三'
});
在进行页面传参时,可以在目标页面地址中添加参数,在目标页面中可以使用uni.getStorageSync方法获取参数值:
uni.getStorageSync('id'); // 123456
uni.getStorageSync('name'); // 张三
1.3 页面跳转回调
在进行页面跳转时,可能需要在目标页面加载完成后执行某些操作,这时就可以使用onLoadComplete方法。该方法会在跳转页面加载完成后执行。
uni.navigateTo({
url: '/pages/index/index',
onLoadComplete () {
console.log('页面加载完成');
}
});
2. Uniapp路由配置
Uniapp支持使用配置文件(manifest.json)来配置路由。
2.1 配置页面路径
在配置文件中,需要将各个页面的路径添加到pages数组中:
"pages": [
{
"path": "pages/home/home",
"style": {}
},
{
"path": "pages/user/user",
"style": {}
}
]
其中,path表示页面路径,style表示页面样式文件。
2.2 配置页面跳转样式
在配置文件中,可以配置各个页面的跳转动画:
"globalStyle": {
"navigateAnimation": {
"animationType": "slide-in-right",
"animationDuration": 300
}
}
其中,animationType表示动画类型,animationDuration表示动画时间。
2.3 页面别名配置
在配置文件中,可以为各个页面设置别名:
"router": {
"alias": {
"/": "/pages/home/home",
"/user": "/pages/user/user"
}
}
其中,/表示根路径,可以将其映射到具体的页面路径。
3. Uniapp路由权限控制
在实际开发中,可能需要根据用户权限来控制页面的访问。Uniapp提供了一套权限控制方案。
3.1 配置路由表
在配置文件中,可以为各个页面设置权限:
"router": {
"auth": {
"/user": {
"permissions": ["admin"]
}
}
}
其中,/user表示目标页面的路径,permissions表示需要的权限列表。如果需要访问该页面,必须具备其中的所有权限。
3.2 配置权限管理器
在Vue实例中,需要定义一个权限管理器,用于管理用户权限信息。
new Vue({
router,
data () {
return {
permissions: []
}
},
created () {
this.$router.beforeEach((to, from, next) => {
if (to.meta.auth) {
if (this.permissions.includes(to.meta.auth)) {
next()
} else {
next('/403')
}
} else {
next()
}
})
}
})
在上面的代码中,使用router.beforeEach方法进行路由拦截,并根据用户权限信息进行处理。如果用户没有访问页面的权限,则跳转到403页面。
4. Uniapp路由扩展
除了默认的路由管理方案外,Uniapp还提供了很多路由扩展工具,可以让开发者更方便地进行页面跳转、参数传递等操作。
4.1 easycom模块
easycom模块是Uniapp提供的组件化工具,可以通过该工具实现页面按需加载和组件自动注册。
"easycom": {
"autoscan": true,
"custom": {
"^uni-(.*)": "@/uni-$1.vue"
}
}
在上面的代码中,使用autoscan参数开启页面按需加载功能,使用custom参数进行组件自动注册。
4.2 pages.json
pages.json是Uniapp的路由配置文件,其中可以配置页面路径、页面跳转样式以及页面权限等信息。
{
"pages": [
{
"path": "pages/user/user",
"style": {}
}
],
"globalStyle": {
"navigateAnimation": {}
},
"router": {
"alias": {},
"auth": {}
}
}
在上面的代码中,可以配置各种路由属性和选项。
4.3 uniapp-router插件
uniapp-router插件是Uniapp提供的路由扩展工具,可以帮助开发者实现更多的功能,如页面历史记录管理、页面参数传递等。
import router from 'uniapp-router';
Vue.use(router, {
mode: 'hash',
debug: true
});
在上面的代码中,使用Vue.use方法引入uniapp-router插件,并设置mode和debug参数。
总结
Uniapp提供了一套完整的路由管理方案,可以帮助开发者实现页面跳转、参数传递、权限控制等功能。除了默认的路由管理方案外,Uniapp还提供了很多路由扩展工具,可以让开发者更方便地进行开发。