【uni-app教程】四、UniAPP 路由配置及页面跳转

2023-11-06

四、UniAPP 路由配置及页面跳转

(1) 路由配置

uni-app页面路由为框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式。类似小程序在 app.json 中配置页面路由一样。所以 uni-app 的路由用法与 Vue Router 不同,如仍希望采用 Vue Router 方式管理路由,可在插件市场搜索 Vue-Router

	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "路由配置",
				"navigationBarBackgroundColor": "#FFFFFF",
				"navigationBarTextStyle": "black",
				"backgroundColor": "#FFFFFF",
				"enablePullDownRefresh": true
			}
		},
		{
			"path": "pages/list/list",
			"style": {
				"navigationBarTitleText": "路由配置2",
				"navigationBarBackgroundColor": "#FFFFFF",
				"navigationBarTextStyle": "black",
				"backgroundColor": "#FFFFFF",
				"enablePullDownRefresh": true
			}
		}
	],

(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)获取当前页面栈

getCurrentPages0函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个
元素为当前页面,
注意:getCurrentPages 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

(4)路由传参与接收

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

//在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({
	url: 'test?id=1&name=uniapp'
});

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

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

起始页面跳转到test.vue页面,并监听test.vue发送过来的事件数据

// 在起始页面跳转到test.vue页面,并监听test.vue发送过来的事件数据
uni.navigateTo({
  url: 'pages/test?id=1',
  events: {
    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
    acceptDataFromOpenedPage: function(data) {
      console.log(data)
    },
    someEvent: function(data) {
      console.log(data)
    }
    ...
  },
  success: function(res) {
    // 通过eventChannel向被打开页面传送数据
    res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'data from starter page' })
  }
})

// 在test.vue页面,向起始页通过事件传递数据
onLoad: function(option) {
  const eventChannel = this.getOpenerEventChannel();
  eventChannel.emit('acceptDataFromOpenedPage', {data: 'data from test page'});
  eventChannel.emit('someEvent', {data: 'data from test page for someEvent'});
  // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
  eventChannel.on('acceptDataFromOpenerPage', function(data) {
    console.log(data)
  })
}

url有长度限制,太长的字符串会传递失败,可改用窗体通信全局变量,另外参数中出现空格等特殊字符时需要对参数进行编码,如下为使用encodeURIComponent对参数进行编码的示例。

<navigator :url="'/pages/test/test?item='+ encodeURIComponent(JSON.stringify(item))"></navigator>
// 在test.vue页面接受参数
onLoad: function (option) {
	const item = JSON.parse(decodeURIComponent(option.item));
}

注意:

  • 页面跳转路径有层级限制,不能无限制跳转新页面
  • 跳转到 tabBar 页面只能使用 switchTab 跳转
  • 路由API的目标页面必须是在pages.json里注册的vue页面。如果想打开web url,在App平台可以使用 plus.runtime.openURL或web-view组件;H5平台使用 window.open;小程序平台使用web-view组件(url需在小程序的联网白名单中)。在hello uni-app中有个组件ulink.vue已对多端进行封装,可参考。

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

因小程序有体积和资源加载限制,各家小程序平台提供了分包方式,优化小程序的下载和启动速度。
所谓的主包,即放置默认启动页面及 TabBar 页面,而分色则是根据 pages.json 的配置进行划分。
在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下整下来,下载完成后再进行展示,此时终端界面会有等待提示。

分包内静态文件示例

"subPackages": [{
	"root": "pages/sub",
	"pages": [{
		"path": "index/index"
	}]
}]

以上面的分包为例,放在每个分包root对应目录下的静态文件会被打包到此分包内。

预下载分包设置
{
	"pages": [{
		"path": "pages/index/index",
		"style": { ...}
	}, {
		"path": "pages/login/login",
		"style": { ...}
	}],
	"subPackages": [{
		"root": "pagesA",
		"pages": [{
			"path": "list/list",
			"style": { ...}
		}]
	}, {
		"root": "pagesB",
		"pages": [{
			"path": "detail/detail",
			"style": { ...}
		}]
	}],
	"preloadRule": {
		"pagesA/list/list": {
			"network": "all",
			"packages": ["__APP__"]
		},
		"pagesB/detail/detail": {
			"network": "all",
			"packages": ["pagesA"]
		}
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【uni-app教程】四、UniAPP 路由配置及页面跳转 的相关文章

随机推荐

  • const关键字与指针

    const关键字与指针 1 指针包含的地址是常量 不能被修改 但可以修改指针指向的数据 int x 10 int const p x p 34 指向的数据可以修改 int y 32 p y 不能修改P指向的地址 2 指针指向的数据是常量 不
  • osgEarth的Rex引擎原理分析(一一零)state中_defineMap构建过程

    目标 一零九 中的问题195 是在绘制过程中 每经过一个状态集StateSet就会将该状态集中的模式 属性 一致变量 定义都放入State的相应变量中 定义都放入 defineMap osg State cpp void State pus
  • Ansible Roles 一键完成LNMP

    Ansible Roles 一 Ansible Roles基本概述 1 Ansible Roles介绍 roles不管是Ansible还是saltstack 我在写一键部署的时候 都不可能把所有的步骤全部写入到一个 剧本 文件当中 我们肯定
  • 大型工厂MES管理系统源码

    生产制造业MES管理系统源码 开发环境 ASP NET C VS2010以上 SQL2008R2 C S架构 主要功能 一 用户管理 1 用户登录 2 用户管理 3 操作员录入 4 用户注销 二 系统设置 1 数据库设置 2 机型设置 3
  • vscode中检查代码插件:flake8

    1 命令行安装 pip install flake8 2 在vscode中的用户设置 settings json 中添加以下两行即可 也可以搜索flake8 python linting flake8Enabled true on form
  • BitLocker恢复获取密钥官方操作指南

    下载驱动安装禁用签名 进入Bios一堆骚操作出现下图问题 BitLocker恢复 下面的识别密钥是不能直接用 真正的恢复密钥是一串四十多位的数字序列 第一步 用另一台电脑浏览器进入aka ms myrecoverykey这个网址 就是图里那
  • unity游戏重新开始,退出,停止,继续按钮及打包发布

    一 游戏退出按钮 脚本Out 分为编辑状态下退出和打包编译后退出 这两种都要写上 using System Collections using System Collections Generic using UnityEngine usi
  • Flutter封装自定义按钮(过渡色、水波纹)

    Flutter封装自定义按钮 过渡色 水波纹 全局公用的按钮组件 用的时候不用写一大坨了 直接往里面传值就好了 注意 这里面的ScreenAdapter是我封装的适配方法 用的时候替换为自己的就好了 import package flutt
  • ES的安装使用(windows版)

    前言 Elasticsearch VS Java jdk 版本兼容性 Oracle OpenJDK AdoptOpenJDK 1 8 0 Oracle OpenJDK 9 Oracle OpenJDK 10 Oracle OpenJDK 1
  • HCIP 笔记

    1 交换基础 1 交换机启用过程 RAM 随机存储 当前配置文件 ROM 只读存储 自检程序 NVRAM 非易失性存储 保存配置 Flash 闪存 操作系统 2 交换机 二层基于MAC地址转发设备 依靠MAC地址表进行数据的转发 3 MAC
  • 线程管理之获取和设置线程信息

    获取和设置线程信息 Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程 知道它的状态 调整控制其优先级 这些属性是 ID 每个线程的独特标识 Name 线程的名称 Priority 线程对象的优先级 优先级别在1 10之间
  • Qt实现登录效果(超详细!超简单!)

    title Qt实现登录效果 超详细 超简单 date 2022 8 13 tags 学习 C Qt categories Qt tip 从一个界面按登录跳转到另一个界面 效果图 首先在登录界面输入正确的用户名和密码后点击登录 即可跳到第二
  • Electron项目打包

    文章目录 前置条件 配置 1 在vue config js 文件中增加配置项 2 根目录增加 scripts 文件夹 新建 installer nsi 文件 文件中具体脚本内容 可参考 3 执行打包指令 4 打包成功后会生成exe文件 5
  • 分享35个非常漂亮的单页网站设计案例

    单页网站是指只有一个页面的网站 这种形式的网站曾经非常流行 现在依然有很多人喜欢 不过 并不是每个网站都适合做成单页 一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做 另外 单页网站有个很大的特点就是导航都很新颖 大多是使用了锚
  • Kendo UI开发教程(3): 初始化Data 属性

    前面在介绍准备Kendo UI开发环境时我们使用jQuery的方法将一个HTML元素转换成一个Kendo UI控件 datepicker kendoDatePicker 除了使用jQuery插件的方法来初始化方法外 每个Kendo 控件还可
  • 序列两两比对算法_学会正确选择多序列比对(coding-sequences)软件

    前几天 实验室的师弟师妹通过本地blast获取一些没有基因组注释物种的蛋白编码序列 原本以为可以快速地进行下一步的选择压力分析 没想到却在多序列比对这一环节出现了棘手的问题 以前 我都是经过PRANK软件进行多序列比对 然后再使用Gbloc
  • TP调试记录

    1 USB tp触摸不准 项目中用到一款触摸屏显示是正常的就是TP不准 触摸的方向也是正确的就是触摸位置不准 屏幕中央触摸位置相对还好 越往边沿越不准 下面是当插上USB tp时抓到了logcat日志 03 06 03 23 18 449
  • 常用DOS命令

    文章目录 一 DOS介绍 二 常用命令 2 1 切换目录 2 2 查看目录 2 3 基本操作 2 4 其他命令 一 DOS介绍 DOS Disk Operating System 磁盘操作系统 二 常用命令 2 1 切换目录 命令 cd 目
  • ai模仿声音软件_浙大学霸本科生顶会研究!只需20分钟音频,AI就能逼真模仿你的声音...

    铜灵 发自 凹非寺量子位 出品 公众号 QbitAI AI精准模仿你的声音 需要多大规模的训练 浙江大学和微软的新研究证明 从0开始学习你的声音到准确逼真 AI只需要200个音频片段和相应标注 20分钟的素材就足够了 并且 这是一种近乎无监
  • 【uni-app教程】四、UniAPP 路由配置及页面跳转

    四 UniAPP 路由配置及页面跳转 1 路由配置 uni app页面路由为框架统一管理 开发者需要在pages json里配置每个路由页面的路径及页面样式 类似小程序在 app json 中配置页面路由一样 所以 uni app 的路由用