uni-app快速入门(七)--组件路由跳转和API路由跳转及参数传递

uni-app有两种页面路由跳转模式,即使用navigator组件跳转和调用API跳转,API调转不要理解为调用后台接口的API,而是指脚本函数中使用跳转函数。

一、组件路由跳转

1.1 打开新页面

      打开新页面使用组件的open-type="navigate",见下面的代码:      

      <navigator url="/pages/news/index" open-type="navigate" hover-class="navigator-hover">

            <button>navigate跳转到新闻页面</button>

       </navigator>

       如果不在navigator组建中添加open-type属性,则默认为open-type="navigate"

1.2 页面重定向

     <navigator url="/pages/news/index" open-type="redirect" hover-class="navigator-hover">

            <button>redirect跳转到新闻页面</button>

     </navigator>

           页面重定向使用了open-type="redirect",注意使用页面重定向不会进入历史记录,不支持

     页面返回。

1.3 页面返回

       页面返回使用open-type="navigateBack":

       <navigator   open-type="navigateBack"  >

            <button type="default">返回</button>

       </navigator>

1.4 Tab切换

       Tab切换主要用于从当前页面跳转到TabBar中的页面,例如我我的页面跳转到购物车页面:

       <navigator url="/pages/cart/index" open-type="switchTab" hover-class="navigator-hover">

            <button>跳转到购物车</button>

        </navigator>

1.5 reLaunch

      open-type设置为reLaunch时,会进行重加载,页面全部出栈,只留下新页面(例如跳转到首页),跳转后的页面不支持页面返回:

     <navigator open-type="reLaunch" url="/pages/index/index"><button>reLaunch跳转到首页</button></navigator>

二、API路由跳转

2.1 打开新页面

     在button组件中增加一个click方法goPage:

<button @click="goPage('/pages/news/index')">跳转到新闻页面</button>,然后script脚本实现goPage方法,goPage中使用uni.navigateTo实现路由跳转:

       <script>

            export default{

                name:"index",

                methods:{

                goPage(url){

                    uni.navigateTo({url:url}) //url中可以带传输,类似html的传参

                }

                }

            }

       </script>

2.2 页面重定向

       使用uni.redirectTo()方法关闭当前页面,跳转到应用内的某个页面,如果跳转到tabBar页面只能使用switchTab跳转。

2.3 页面返回

       使用uni.navigateBack()方法关闭当前页面,返回上一页面或多级页面,并且可以决定需要返回几层:

       uni.navigateBack({delta:1})

        此方法类似vue中的this.$router.go(-1),其中delta参数表示返回的页面数,如果大于现有页面数则返回到首页。

2.4 Tab切换

       使用uni.switchTab()方法跳转到tabBar页面,并关闭所有其他非 tabBar页面。

2.5 reLaunch

      使用uni.reLaunch()可以关闭所有页面,接着跳转到应用内的某个页面。

三、参数传递

3.1 接收参数

      例如首页跳转到新闻页带参数:

      uni.navigateTo({

          url:'pages/news/index?id=1&title=新闻'

      })

     在pages/news/index.vue页面接收参数:

     onLoad(opts){

         console.log(opts.id)//取id参数

         console.log(opts.title)//取title参数

     }

       需要注意的是,url有长度限制,太长的字符串会传递失败,可以用encodeURIComponent()方法解决,例如url:"pages/news/index?id=1&title="+encodeURIComponent('新闻动态')

       接收参数的时候使用decodeURIComponent:

       console.log(decodeURLComponent(opts.title))

3.2 获取当前页栈

       使用navigateTo()跳转会将页面添加到页面栈中,使用getCurrentPage()获取所有页面栈,第一个页面索引为0,最后进栈的是当前页(索引最大的,索引为总页面栈数量-1):

       onLoad(opts){

           //获取页面栈

           let pages = getCurrentPaes();

           //第一个页面

           let firstPage = pages[0];

           console.log(firstPage.route);//结果pages/index/index

           //获取当前页

          let currPage = pages[pages.length-1];

          console.log(currPage.route);//最后打开的页

       }

3.3 解决微信小程序10层跳转限制

        微信小程序为解决性能问题,使用navigateTo()方法跳转,其页面限制为10层,解决方案是10页面以内使用navigateTo,超过10页使用redirectTo,例如下面的代码:

       组件使用自定义pushPage方法:

       <div @click="pushPage('pages/news/index?id=1&title=XXX')">xxx新闻标题</div>

       页面脚本:

       onLoad(opts){

           let pages = getCurrentPages();

           //获取页面栈总页数

           this.pagesCount = pages.length;

      },

       methods:{

            pushPage(url){

                if(this.pageCount>10){

                    uni.redirectTo({url})

                }

                else{

                    uni.navigateTo({url:url})

                }

            }

       }

3.4 解决tabBar不能传参问题

      跳转到 tabBar页面是不能传参的,此时可以将参数传入本地缓存实现传参。例如组件中使用<div @click="goPage('pages/index/index','1')">北京店</div>,脚本中goPage:

goPage(url,id){

    uni.setStorageSync("branch_shop_id",id);//设置缓存名字branch_shop_id,并将传入的id存入缓存

    uni.switchTab({url})

}

然后在接收页面pages/index/index的脚本中接收参数:

onShow(){

    let branchShopId = uni.getStorageSync("branch_shop_id");

    console.log(branchShopId);

}

本节总结:

       本节介绍了uni-app的组件路由跳转、API路由跳转、uni-app接收参数及层级限制,以及tabBar使用本地缓存实现参数传递等。

       

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

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

相关文章

Windows环境GeoServer打包Docker极速入门

目录 1.前言2.安装Docker3.准备Dockerfile4.拉取linux环境5.打包镜像6.数据挂载6.测试数据挂载7.总结 1.前言 在 Windows 环境下将 GeoServer 打包为 Docker&#xff0c;可以实现跨平台一致性、简化环境配置、快速部署与恢复&#xff0c;同时便于扩展集成和版本管理&#xff0c…

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台&#xff08;中断方式&#xff09; 改进&#xff08;前后台&#xff08;中断&#xff09;&#xff09;定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…

VScode使用Batch Runner插件在终端运行bat文件

搜索并安装插件Batch Runner 创建测试文件 echo off echo "Hello world"按F5运行

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC

Debezium日常分享系列之&#xff1a;Debezium3版本Debezium connector for JDBC 概述JDBC连接器的工作原理消费复杂的Debezium变更事件至少一次的传递多个任务数据和列类型映射主键处理删除模式幂等写入模式演化引用和大小写敏感性连接空闲超时数据类型映射部署Debezium JDBC连…

Redis-08 Redis集群

Redis槽位 Redis分片 Redis集群优势 主要掌握第三种 为什么槽位是16384&#xff1f; 三主三从&#xff1a; 每个主机只能写在自己的槽位 所以登录redis集群记得加参数 -c 比如redis-cli -a dc123 -p 6380 -c 加了 -c 相当于会进行路由转发&#xff0c;不属于自己槽位的…

微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)

文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…

智能指针原理、使用和实现——C++11新特性(三)

目录 一、智能指针的理解 二、智能指针的类型 三、shared_ptr的原理 1.引用计数 2.循环引用问题 3.weak_ptr处理逻辑 四、shared_ptr的实现 五、定制删除器 六、源码 一、智能指针的理解 问题&#xff1a;什么是智能指针&#xff1f;为什么要有智能指针&#xff1f;智…

初识Linux · 信号处理 · 续

目录 前言&#xff1a; 可重入函数 重谈进程等待和优化 前言&#xff1a; 在前文&#xff0c;我们已经介绍了信号产生&#xff0c;信号保存&#xff0c;信号处理的主题内容&#xff0c;本文作为信号处理的续篇&#xff0c;主要是介绍一些不那么重要的内容&#xff0c;第一个…

IPTV智慧云桌面,后台服务器搭建笔记

环境CentOs7.9 &#xff0c;安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔&#xff0c;修改服务器端口安全组端口 26029 注意&#xff01;&#xff01;&#xff01;&#xff01…

模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC

文章目录 预测框的预测指标——IoU&#xff08;交并比&#xff09;分类预测指标混淆矩阵&#xff08;Confusion Matrix&#xff0c;TP、FP、FN、TN)Precision&#xff08;精度&#xff09;Recall&#xff08;召回率&#xff09;P-R曲线F1-scoreTPR、TNR、FPR、FNRROC曲线下面积…

本草智控:中药实验管理的智能时代

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架&#xff0c;JAVA作为开发语…

父组件提交时让各自的子组件验证表格是否填写完整

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 父组件中有三个表格&#xff0c;表格中时输入框&#xff0c;有些输入框是必填的&#xff0c;在父组件提交时需要验证这三个表格的必填输入框中是否有没填写的。 原因分析&#xff1a; 提示&#xff1a…

嘴尚绝卤味独特的口感

在餐饮行业里&#xff0c;嘴尚绝卤味无疑是一颗璀璨的明星。自2021年8月7日创立以来&#xff0c;这个品牌就以其独特的口感和制作工艺赢得了众多食客的青睐。嘴尚绝卤味&#xff0c;作为四川优优熊猫餐饮管理有限公司旗下的主打品牌&#xff0c;专注于提供高品质的休闲佐食&…

JDK17 安装使用

一、Java JDK&#xff08;Java Development Kit&#xff09; 它是开发、运行Java应用程序所需的各种工具和库的集合。 二、JDK 1.8&#xff08;也称为Java 8&#xff09;和JDK 17是两个重要的版本 这两个版本在语言特性、性能优化和安全性方面都有所不同。 1、语言特性 …

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 目前使用的是三星4K显示屏&#xff0c;屏幕分辨率太高了&#xff0c;导致VMWare Workst…

uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点

如图&#xff0c;如果要实现上方的效果&#xff1a; 上方两个效果根据经纬度标记点缩放后有重复点会添加数量 用到的文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.htmlMapContext.addMarkers(Object object) 添加标记点Ma…

第6章详细设计 -6.7 PCB工程需求表单

6.7 PCB工程需求表单 PCB工程需求表是PCB设计的入口条件&#xff0c;以一块单板为例&#xff0c;表6.2所示的PCB工程需求表单明确了Signal Integrity&#xff08;SI&#xff0c;信号完整性&#xff09;和Power Integrity&#xff08;PI&#xff0c;电源完整性&#xff09;的要…

Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系

一.什么是Spring&#xff1f;它解决了什么问题&#xff1f; 1.1什么是Spring&#xff1f; Spring&#xff0c;一般指代的是Spring Framework 它是一个开源的应用程序框架&#xff0c;提供了一个简易的开发方式&#xff0c;通过这种开发方式&#xff0c;将避免那些可能致使代码…

重构Action-cli前端脚手架

一、概述 最近一年&#xff0c;为了满足公司业务开发&#xff0c;解决重复搭建项目繁琐过程&#xff0c;自己开发了一个前端脚手架&#xff0c;并发布到npm。随着时间的推移&#xff0c;发现之前的版本存在很多问题&#xff0c;有些功能做不到位&#xff0c;而且代码也不是很规…

Kotlin return与return@forEachIndexed

Kotlin return与returnforEachIndexed fun main() {val data arrayOf(0, 1, 2, 3, 4)println("a")data.forEachIndexed { index, v ->if (v 2) {//类似while循环中的continue//跳过&#xff0c;继续下一个forEachIndexed迭代returnforEachIndexed}println("…