• uniapp-路由uni-simple-router


    背景

    • 专为uniapp打造的路由器,和uniapp深度集成
    • 通配小程序、App和H5端
    • H5能完全使用vue-router开发
    • 模块化、查询、通配符、路由参数
    • 使 uni-app实现嵌套路由(仅H5端完全使用vue-router)
    • uniapp用到了很多vue的api,但在路由管理的功能相对于vue-router还是比较欠缺的,比如全局导航守卫

    安装 

    1. // 项目根目录执行命令行
    2. npm install uni-simple-router
    3. // 根据pages.json总的页面,自动构建路由表
    4. npm install uni-read-pages

     配置vue.config.js

    注:如果根目录没有vue.config.js文件,请手动创建

    1. // vue.config.js
    2. const TransformPages = require('uni-read-pages')
    3. const { webpack } = new TransformPages()
    4. module.exports = {
    5. configureWebpack: {
    6. plugins: [
    7. new webpack.DefinePlugin({
    8. ROUTES: webpack.DefinePlugin.runtimeValue(() => {
    9. const tfPages = new TransformPages({
    10. includes: ['path', 'name', 'aliasPath','meta']
    11. });
    12. return JSON.stringify(tfPages.routes)
    13. }, true)
    14. })
    15. ]
    16. }
    17. }

     新建router.js文件

    1. import { RouterMount, createRouter } from 'uni-simple-router';
    2. const router = createRouter({
    3. platform: process.env.VUE_APP_PLATFORM,
    4. routes: [...ROUTES]
    5. });
    6. //全局路由前置守卫
    7. router.beforeEach((to, from, next) => {
    8. //权限控制登录
    9. if(to.meta.auth){
    10. console.log("需要登录");
    11. if("token"){
    12. next();
    13. }else{
    14. console.log("请登录");
    15. }
    16. }else{
    17. console.log("不需要登录");
    18. next();
    19. }
    20. console.log("前置守卫"+JSON.stringify(to));
    21. });
    22. // 全局路由后置守卫
    23. router.afterEach((to, from) => {
    24. console.log('跳转结束')
    25. })
    26. export {
    27. router,
    28. RouterMount
    29. }

    main.js

    1. import {router,RouterMount} from './router/router.js' //路径换成自己的
    2. Vue.use(router)
    3. //v1.3.5起 H5端 你应该去除原有的app.$mount();使用路由自带的渲染方式
    4. // #ifdef H5
    5. RouterMount(app,router,'#app')
    6. // #endif
    7. // #ifndef H5
    8. app.$mount(); //为了兼容小程序及app端必须这样写才有效果
    9. // #endif

     page.json

    1. {
    2. "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
    3. {
    4. "path": "pages/index/index",
    5. "name": "index",
    6. "style": {
    7. "navigationBarTitleText": "uni-app"
    8. }
    9. }, {
    10. "path": "pages/home/home",
    11. "name": "home",
    12. "meta": {
    13. "auth": false, //需要登录
    14. "async": true, //是否同步
    15. "title": "首页", //标题
    16. "group": "商城" //分组
    17. },
    18. "style": {
    19. "navigationBarTitleText": "",
    20. "enablePullDownRefresh": false
    21. }
    22. },{
    23. "path": "pages/haha/haha",
    24. "name": "haha",
    25. "meta": {
    26. "auth": true, //需要登录
    27. "async": true, //是否同步
    28. "title": "首页", //标题
    29. "group": "商城" //分组
    30. },
    31. "style": {
    32. "navigationBarTitleText": "",
    33. "enablePullDownRefresh": false
    34. }
    35. }
    36. ],
    37. "globalStyle": {
    38. "navigationBarTextStyle": "black",
    39. "navigationBarTitleText": "uni-app",
    40. "navigationBarBackgroundColor": "#F8F8F8",
    41. "backgroundColor": "#F8F8F8"
    42. }
    43. }

     页面跳转和参数接收

    • push()
    • pushTab() : 跳转tar栏
    • replace() : 替换
    • replaceAll() : 替换所有
    • back() : 直接带上数字返回第几层
    • 注意:path和query配合使用,而name和params配合使用
    1. //通过name方式跳转
    2. this.$Router.push({
    3. name: 'home',
    4. params: {
    5. name: 'Joseph',
    6. age: 22
    7. }
    8. })
    9. ------------------------------------
    10. //通过path形式进行跳转
    11. this.$Router.push({
    12. path: '/pages/haha/haha',
    13. query: {
    14. name: 'Josdep33333h',
    15. age: 24
    16. }
    17. })
    18. -------------------------------------
    19. //用uni形式跳转到新页面,并传递参数
    20. uni.navigateTo({
    21. url:'/pages/home/home?id=2&name=Josep33333h'
    22. });

    1. // 页面接收参数——query中的参数
    2. onLoad(){
    3. // query传参
    4. const query=this.$Route.query
    5. // params传参
    6. const params=this.$Route.params
    7. }

    组件

    1. // 首先在main.js中进行注册,将my-link注册为全局组件,注册后使用方法同<router-link>
    2. import Mylink from './node_modules/uni-simple-router/dist/link.vue'
    3. Vue.component('my-link',Mylink)
    4. // 使用
    5. // navType对应的就是push/pushTab/replace/replaceAll
    6. <my-link to="{path: '/pages/mine/index',query: {name: '我只想去tab5的my-link'}}" navType="pushTab">
    7. <button type="default">我是router-link</button>
    8. </my-link>

    1. onLoad(option) {
    2. //原生获取数据
    3. console.log("zz",option);
    4. // query传参
    5. const query=this.$Route.query
    6. console.log(query);
    7. // params传参
    8. const params=this.$Route.params
    9. console.log(params);
    10. }

    详情使用参考

    uni-simple-router - xsk-walter - 博客园

  • 相关阅读:
    作为主播如何打造个人IP的7个技巧
    关于HashMap默认容量的选择
    VUE+Spring前后台传值的坑,后台接收的String参数在末尾会出现 “=”
    三江城115m²3室2厅2卫,现代简约不单是居所更是对生活的向往。福州中宅装饰,福州装修
    论文阅读--《FourierGNN:从纯图的角度重新思考多元时间序列预测》
    vue2 使用vue-org-tree 组件完整简单示例Demo vue2-org-tree
    汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)
    1856. 子数组最小乘积的最大值-前准和+单调栈
    华为机试真题实战应用【赛题代码篇】-购买水果最便宜的方案(附Java和C++代码实现)
    Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug
  • 原文地址:https://blog.csdn.net/zxc472504515/article/details/125455990