• 【uni-app】路由


    (1)路由配置

    uni-app 页面路由全部交给框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式(类似小程序在 app.json 中配置页面路由)。

    
    "pages": [
            {
                "path": "pages/index",
                "style": {
                    "navigationBarTitleText": "路由配置",
                    "navigationBarBackgroundColor": "#FFFFFF",
                    "navigationBarTextStyle": "black",
                    "backgroundColor": "#FFFFFF",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "pages/user",
                "style": {
                    "navigationBarTitleText": "路由配置",
                    "navigationBarBackgroundColor": "#FFFFFF",
                    "navigationBarTextStyle": "black",
                    "backgroundColor": "#FFFFFF",
                    "enablePullDownRefresh": true
                }
            }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    可以在这里配置底部导航栏:

    "tabBar": {
    		"color": "#7A7E83",
    		"selectedColor": "#3cc51f",
    		"borderStyle": "white",
    		"backgroundColor": "#ffffff",
    		"list": [{
    			"pagePath": "pages/index/index",
    			"iconPath": "static/resource/images/tab_index.png",
    			"selectedIconPath": "static/resource/images/tab_index_seled.png",
    			"text": "首页"
    		},{
    			"pagePath": "pages/order/index",
    			"iconPath": "static/resource/images/tab_pub.png",
    			"selectedIconPath": "static/resource/images/tab_pub_seled.png",
    			"text": "订单"
    		}, {
    			"pagePath": "pages/user/index",
    			"iconPath": "static/resource/images/tab_user.png",
    			"selectedIconPath": "static/resource/images/tab_user_seled.png",
    			"text": "我的"
    		}]
    	},
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    当然还可以配置全局样式等等。

    (2)路由跳转

    uni-app 有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳转(编程式导航)

    框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:

    路由方式页面栈表现触发时机
    初始化新页面入栈uni-app 打开的第一个页面
    打开新页面新页面入栈调用 API uni.navigateTo
    使用组件
    页面重定向当前页面出栈,新页面入栈调用 API uni.redirectTo
    使用组件
    页面返回页面不断出栈,直到目标返回页调用 API uni.navigateBack
    使用组件 、
    用户按左上角返回按钮、安卓用户点击物理back按键
    Tab 切换页面全部出栈,只留下新的 Tab 页面调用 API uni.switchTab
    使用组件 、
    用户切换 Tab
    重加载页面全部出栈,只留下新的页面调用 API uni.reLaunch
    使用组件

    (3)获取当前页面栈

    getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

    注意: getCurrentPages() 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

    (4)路由传参与接收

    说明:页面生命周期的 onLoad()监听页面加载,其参数为上个页面传递的数据,如:

    
    //页面跳转并传递参数
    uni.navigateTo({
        url: 'page2?name=liy&message=Hello'
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5

    url为将要跳转的页面路径 ,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔。如 ‘path?key1=value2&key2=value2’,path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数。

    
    // 页面 2 接收参数
    onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
        console.log(option.name); //打印出上个页面传递的参数。
        console.log(option.message); //打印出上个页面传递的参数。
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:url 有长度限制,太长的字符串会传递失败,并且不规范的字符格式也可能导致传递失败,所以对于复杂参数建议使用 encodeURI、decodeURI 进行处理后传递

    (5)小程序路由分包配置

    因小程序有体积和资源加载限制,各家小程序平台提供了分包方式,优化小程序的下载和启动速度。

    所谓的主包,即放置默认启动页面及 TabBar 页面,而分包则是根据 pages.json 的配置进行划分。

    在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下载下来,下载完成后再进行展示,此时终端界面会有等待提示。

    
    "subPackages": [
        {
                "root": "news",
                "pages": [{
                        "path": "index",
                        "style": {
                            "navigationBarTitleText": "新闻中心",
                            "navigationBarBackgroundColor": "#FFFFFF",
                            "navigationBarTextStyle": "black",
                            "backgroundColor": "#FFFFFF"
                        }
                    }
                ]
            }
        ... 
    ],
    // 预下载分包设置
    "preloadRule": {
            "pages/index": {
                "network": "all",
                "packages": ["activities"]
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测
    范数Norm-衡量向量大小的方法
    再获认可!知道创宇入选“业务安全推进计划”首批成员单位
    安卓sqlite数据库问题请教
    3D格式转换工具HOOPS Exchange使用指南,新手必看
    AtCoder 265G 线段树
    Electron学习笔记(四)
    加密大崩盘,Web3游戏到底还有没有未来?5篇论文深度探讨
    javah5仿淘宝购物系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
  • 原文地址:https://blog.csdn.net/XiugongHao/article/details/136285052