uniapp路由

1、路由登记

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

在这里插入图片描述
uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下:

  • path: String类型,用于配置页面路径
  • style: Object类型,用于配置页面窗口表现,配置项参考uniapp中pageStyle
  • needLogin:Boolean类型 默认false,表示是否需要登录才可访问

pages.json文件中 页面路由部分 代码示意 如下 👇:

{"pages": [{"path": "pages/index/index","style": { ... }}, {"path": "pages/login/login","style": { ... }}]
}

新建页面
点击文件夹 =》右键选择新建页面
在这里插入图片描述
点击新建页面后出现如下弹框:
在这里插入图片描述

  1. 新建页面的名称
  2. 新建页面的文件类型是vue文件还是nvue文件还是两者都有
  3. 是否创建同名目录,默认开启就是说默认他会给你先新建一个目录然后里面再放新建的页面文件
  4. 新建页面的文件位置 一般情况下不会动这里,除非你一开始点新建页面的时候点错父级文件夹了
  5. 选择模板,有很多个模板可以通过点击5的选择模板区域右侧预览模板,从而选择自己需要的合适模板。如果这里面都没有你想要的模板你还可以点击8左侧去插件市场选择模板,当然可以点击8右侧自定义模板
  6. 是否要在pages.json中注册,默认是注册的,但如果你新建的页面是个组件的话这里可以取消
  7. 创建,点击按钮就会按照你选择的条件新建一个页面。

2、路由跳转

uni-app 有两种页面路由跳转方式:使用navigator组件跳转、调用API跳转

tips:

  • 页面返回时会自动关闭 loading 及 toast, modal 及 actionSheet 不会自动关闭。
  • 页面关闭时,只是销毁了页面实例,未完成的网络请求、计时器等副作用需开发者自行处理。
2.1 使用navigator组件跳转

该组件类似HTML中的<a>组件,但只能跳转本地页面。
目标页面必须在pages.json中注册。

2.1.1 属性
  • url:String类型,表示应用内的跳转链接,值为相对路径或绝对路径,如:"../first/first","/pages/first/first", 注意不能加 .vue 后缀
  • open-type:String类型默认navigate,表示跳转方式

    open-type 有效值

    1. navigate 对应 uni.navigateTo 的功能
    2. redirect 对应 uni.redirectTo 的功能
    3. switchTab 对应 uni.switchTab 的功能
    4. reLaunch 对应 uni.reLaunch 的功能 抖音小程序与飞书小程序不支持
    5. navigateBack 对应 uni.navigateBack 的功能
    6. exit 退出小程序,target="miniProgram"时生效
  • delta:Number类型,当 open-type'navigateBack' 时有效,表示回退的层数
  • animation-type:String类型,默认pop-in/out,当 open-typenavigatenavigateBack 时有效,窗口的显示/关闭动画效果,详见:窗口动画
  • animation-duration:Number类型默认300,当 open-typenavigatenavigateBack 时有效,窗口显示/关闭动画的持续时间。
  • hover-class:String类型默认navigator-hover,用于指定点击时的样式类,当hover-class="none"时,没有点击态效果
  • hover-stop-propagation:Boolean类型默认false,指定是否阻止本节点的祖先节点出现点击态
  • hover-start-time:Number类型默认50 ,表示按住后多久出现点击态,单位毫秒
  • hover-stay-time:Number类型默认600,表示手指松开后点击态保留时间,单位毫秒
  • target:String类型,默认是self,表示 在哪个小程序目标上发生跳转,默认当前小程序,值域self/miniProgram
2.1.2 代码示例

代码示例效果展示

<template><view><view class="page-body"><view class="btn-area"><navigator url="navigate/navigate?title=navigate" hover-class="navigator-hover"><button type="default">跳转到新页面</button></navigator><navigator url="redirect/redirect?title=redirect" open-type="redirect" hover-class="other-navigator-hover"><button type="default">在当前页打开</button></navigator><navigator url="/pages/tabBar/extUI/extUI" open-type="switchTab" hover-class="other-navigator-hover"><button type="default">跳转tab页面</button></navigator></view></view></view>
</template>
<script>
// navigate.vue页面接受参数
export default {onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数console.log(option.id); //打印出上个页面传递的参数。console.log(option.name); //打印出上个页面传递的参数。}
}
</script>

url有长度限制,太长的字符串会传递失败,可使用窗体通信、全局变量,或encodeURIComponent等多种方式解决,如下为encodeURIComponent示例。

<navigator :url="'/pages/navigate/navigate?item='+ encodeURIComponent(JSON.stringify(item))"></navigator>

// navigate.vue页面接受参数

onLoad: function (option) {const item = JSON.parse(decodeURIComponent(option.item));
}
2.1.3 注意事项
  1. 跳转tabbar页面,必须设置open-type="switchTab"
  2. navigator-hover 默认为 {background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}, <navigator> 的子节点背景色应为透明色。
  3. navigator-open-type属性 如果使用对应的值,则对应值的功能会高于对应跳转路径。
  4. app-nvue 平台只有纯nvue项目(render为native)才支持 <navigator>render为native的情况下,nvue暂不支持navigator组件,请使用API跳转。
  5. app下退出应用,Android平台可以使用plus.runtime.quit。iOS没有退出应用的概念。
  6. uLink组件是navigator组件的增强版,样式上自带下划线,功能上支持打开在线网页、其他App的schema、mailto发邮件、tel打电话。
  7. Vue3 项目因 SSR 需要,H5 端会在外层嵌套 a 标签
2.2调用API跳转
2.2.1 uni.navigateTo(OBJECT)

保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。

OBJECT参数

  • url :String类型,必填,是 需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 ‘path?key=value&key2=value2’,path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数
  • animationType:String类型,不必填,默认pop-in,是窗口显示的动画效果,详见:窗口动画
  • animationDuration:Number类型,不必填,默认300,是窗口动画持续时间,单位为 ms
  • events:Object类型,不必填,是 页面间通信接口,用于监听被打开页面发送到当前页面的数据。
  • success:Function类型,不必填,是接口调用成功的回调函数
  • fail:Function类型,不必填,是接口调用失败的回调函数
  • complete:Function类型,不必填,是接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

Object res

  • eventChannel EventChannel 和被打开页面进行通信

示例

//在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({url: 'test?id=1&name=uniapp'
});
// 在test.vue页面接受参数
export default {onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数console.log(option.id); //打印出上个页面传递的参数。console.log(option.name); //打印出上个页面传递的参数。}
}
// 在起始页面跳转到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));
}

注意:

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

关闭当前页面,跳转到应用内的某个页面。

OBJECT参数说明

  • url:String类型,必填,是需要跳转的应用内非 tabBar 的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2'
  • success:Function类型,不必填,是接口调用成功的回调函数
  • fail:Function类型,不必填,是接口调用失败的回调函数
  • complete:Function类型,不必填,是 接口调用结束的回调函数(调用成功、失败都会执行)

代码示例

uni.redirectTo({url: 'test?id=1'
});

注意:

  • 跳转到 tabBar 页面只能使用 switchTab 跳转
2.2.3 uni.reLaunch(OBJECT)

关闭所有页面,打开到应用内的某个页面。

注意:

如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide

OBJECT参数说明

  • url:String类型,必填,是需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数
  • success:Function类型,不必填,是接口调用成功的回调函数
  • fail:Function类型,不必填,是接口调用失败的回调函数
  • complete:Function类型,不必填,是 接口调用结束的回调函数(调用成功、失败都会执行)

示例

uni.reLaunch({url: 'test?id=1'
});
export default {onLoad: function (option) {console.log(option.id);}
}

Tips:

  • H5端调用uni.reLaunch之后之前页面栈会销毁,但是无法清空浏览器之前的历史记录,此时navigateBack不能返回,如果存在历史记录的话点击浏览器的返回按钮或者调用history.back()仍然可以导航到浏览器的其他历史记录。
2.2.4 uni.switchTab(OBJECT)

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

注意:

如果调用了 uni.preloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide

OBJECT参数说明

  • url:String类型,必填,是 需要跳转的 tabBar 页面的路径(需在 pages.json 的 tabBar 字段定义的页面),路径后不能带参数
  • success:Function类型,不必填,是接口调用成功的回调函数
  • fail:Function类型,不必填,是接口调用失败的回调函数
  • complete:Function类型,不必填,是 接口调用结束的回调函数(调用成功、失败都会执行)

代码示例
pages.json

{"tabBar": {"list": [{"pagePath": "pages/index/index","text": "首页"},{"pagePath": "pages/other/other","text": "其他"}]}
}

other.vue

uni.switchTab({url: '/pages/index/index'
});
2.2.5 uni.navigateBack(OBJECT)

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

OBJECT参数说明

  • delta:Number类型,不必填,默认1 ,是返回的页面数,如果 delta 大于现有页面数,则返回到首页。
  • animationType:String类型,不必填,默认pop-out,是窗口关闭的动画效果,详见:窗口动画
  • animationDuration:Number类型,不必填,默认300,是窗口关闭动画的持续时间,单位为 ms
  • success:Function类型,不必填,是接口调用成功的回调函数
  • fail:Function类型,不必填,是接口调用失败的回调函数
  • complete:Function类型,不必填,是 接口调用结束的回调函数(调用成功、失败都会执行)

代码示例

// 此处是A页面
uni.navigateTo({url: 'B?id=1'
});// 此处是B页面
uni.navigateTo({url: 'C?id=1'
});// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({delta: 2
});

tips:

  • 调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。

2.2.1-2.2.5注意事项

  • navigateTo, redirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 不能在首页 onReady 之前进行页面跳转。
  • H5端页面刷新之后页面栈会消失,此时navigateBack不能返回,如果一定要返回可以使用history.back()导航到浏览器的其他历史记录。
2.2.6 EventChannel页面间事件通信通道

方法

1. EventChannel.emit(string eventName, any args)
触发一个事件

  • string eventName 事件名称
  • any args 事件参数

2. EventChannel.off(string eventName, function fn)
取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数

  • string eventName 事件名称
  • function fn 事件监听函数
  • 参数 any args 触发事件参数

3. EventChannel.on(string eventName, function fn)
持续监听一个事件

  • string eventName 事件名称
  • function fn 事件监听函数
  • 参数 any args 触发事件参数

4. EventChannel.once(string eventName, function fn)
监听一个事件一次,触发后失效

  • string eventName 事件名称
  • function fn 事件监听函数
  • 参数 any args 触发事件参数

3. 页面栈

序号字形描述
1【栈】表示栈的那个管道
2→栈】表示入栈
3栈】→表示出栈

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九州金榜|教育孩子小技巧--给孩子讲故事

百年大计&#xff0c;教育为本。对于孩童来讲&#xff0c;故事无疑是最好的教育方法&#xff0c;通过一个个引人入胜的小故事将其中蕴含的道理、经验、哲理、观念传递给孩子。 可以这么说&#xff0c;故事对于儿童获取词汇储备、洞察能力、处事方法、情商和智力的提升都有着极为…

Go 语言如何读取 excel 测试数据,简单易学

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

算法基础day2

前缀和 #include <iostream> using namespace std; const int N100010; int n,m; int a[N],s[N]; int main() {scanf("%d%d",&n,&m);for(int i1;i<n;i) scanf("%d",&a[i]);for(int i1;i<n;i) s[i]s[i-1]a[i];while(m--){int l,r;s…

Gooxi亮相2023中国数据与存储峰会展示最新存储解决方案

今日&#xff0c;以“数智创新&#xff0c;AI未来”为主题的2023 中国数据与存储峰会在北京顺利举行&#xff0c;Gooxi受邀参与并展示了最新存储服务器产品&#xff0c;搭配最新处理器平台&#xff0c;能够广泛应用在人工智能、数据分析、云端计算、数据存储和高性能计算等领域…

兔子目标检测数据集VOC格式3900张

兔子是一类可爱的哺乳动物&#xff0c;拥有圆润的脸庞和长长的耳朵&#xff0c;身体轻盈柔软。它们通常是以温和和友善的形象出现在人们的视野中&#xff0c;因此常常成为童话故事和卡通形象中的角色。 兔子是草食性动物&#xff0c;主要以各种草本植物为食&#xff0c;包括草…

python查找mongo中符合条件的json记录

一、需求&#xff1a; 之前有次需要临时查找mongo中存储的json串&#xff0c;符合特定条件的记录&#xff1b; 举个例子&#xff0c;mongo中记录如下图&#xff1a; 其中每条存储的数据大概为&#xff1a; [{"createUser": "Zxtech","paramName&qu…

NFC与ZigBee技术在智慧农业物联网监测系统中的应用

近年来&#xff0c;我国农业物联网技术飞速发展&#xff0c;基于物联网技术的智能农业监测系统有望得到较大规模的推广应用。但传统的物联网农业监测系统其网络结构层次单一&#xff0c;多采用基于有线或无线结构的节点-上位机数据采集模式&#xff0c;节点数据访问模式缺乏灵活…

【Leetcode 39】组合总和 —— 回溯法

39. 组合总和 给你一个无重复元素的整数数组candidates和一个目标整数target &#xff0c;找出candidates中可以使数字和为目标数target的 所有不同组合&#xff0c;并以列表形式返回。你可以按**任意顺序 **返回这些组合。 candidates中的同一个数字可以 无限制重复被选取 。…

喜讯丨智安网络实力上榜《嘶吼2023中国网络安全产业势能榜》

近日&#xff0c;嘶吼安全产业研究院正式发布《嘶吼2023中国网络安全产业势能榜》。智安网络凭借在网络安全行业领先的产品实力、专业的安全服务水平及多年累积的行业经验&#xff0c;从300余家厂商中脱颖而出&#xff0c;成为《中国网络安全产业势能榜》互联网行业势能厂商。 …

ACM32F403/F433 12 位多通道国产芯片,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

mac node基本操作

1 查看所有版本 npm view node versions输出 2 查看已经安装的版本 n list3 安装指定版本 sudo -E n 16.0.04 切换版本 sudo n 16.0.05 查看版本 node -v

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计

HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 &#x1f4a5; 文章目录一、&#x1f6a9; 网站描述二、&#x1f38c; 网站介绍三、&#x1f3f4; 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…

vue项目移动端点击图片放大预览(可拖拽,放大)

1.下载依赖 npm install vue-photo-preview -S 2.引入 main.js 中全局引入 import preview from vue-photo-preview import vue-photo-preview/dist/skin.css Vue.use(preview) 3. 应用 给图片加上 preview"0" 分组 <img preview"0" style"…

【XR806开发板试用】XR806串口驱动CM32M对小厨宝的控制实验

一.说明 非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动,并获得开发板试用。 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持OpenHarmony minisystem和FreeRTOS&#xff0c;具有集成度高、…

用通俗易懂的方式讲解大模型:基于 LangChain 和 ChatGLM2 打造自有知识库问答系统

随着人工智能技术的迅猛发展&#xff0c;问答机器人在多个领域中展示了广泛的应用潜力。在这个信息爆炸的时代&#xff0c;许多领域都面临着海量的知识和信息&#xff0c;人们往往需要耗费大量的时间和精力来搜索和获取他们所需的信息。 在这种情况下&#xff0c;垂直领域的 A…

C++ //例13.14 将一批数据以二进制形式存放在磁盘文件中。例13.15 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 例13.14 例13.15 例13.14 将一批数据以二进制形式存放在磁盘文件中。 例13.15 将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差异。…

Zookeeper之快速入门

前言 本篇文章主要还是让人快速上手入门&#xff0c;想要深入的话可以通过书籍系统的学习。 简介 是什么 可用于协调、构建分布式应用。 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储&#xff0c;并且可以对树中的节点进行有效管理…

AI产品经理-借力

AI产品经理-借力&#xff1a;学会善用供应商改造自有产品 1.整个项目的工作方法 2.项目启动-行业调研 3.项目启动-供应商选型

喜讯|极狐GitLab 通过信通院汽车软件研发效能成熟度模型能力

12 月 27 日&#xff0c;在由中国信息通信研究院&#xff08;下称信通院&#xff09;、中国通信标准化协会联合主办的2023系统稳定性与精益软件工程大会-汽车云质效专场峰会上&#xff0c;信通院发布了“2023年下半年汽车云评估结果”&#xff0c;极狐GitLab 一体化 DevOps 平台…

centos7 使用openssl 配置证书服务器(史上最详细版本)

背景 最近接到一个任务&#xff1a;由于我们的产品涉及使用数字证书进行签名、签章&#xff0c;如果需要使得签名签章暗具有法律效力&#xff0c;就必须使用权威CA中心颁发的数字证书&#xff0c;就需要小钱钱&#xff1b;但是对于测试来说&#xff0c;就可以适当减少小钱钱的…