微信小程序 wx.navigateback(object) 使用方法详解-尊龙官方平台

微信小程序 wx.navigateback(object) 使用方法详解

el/2024/3/25 18:23:49

官方文档

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

参数

object object

属性类型默认值必填说明最低版本
deltanumber 返回的页面数,如果 delta 大于现有页面数,则返回到尊龙凯时官方首页。 
successfunction 接口调用成功的回调函数 
failfunction 接口调用失败的回调函数 
completefunction 接口调用结束的回调函数(调用成功、失败都会执行) 

示例代码

// 注意:调用 navigateto 跳转时,调用该方法的页面会被加入堆栈,而 redirectto 方法则不会。见下方示例代码// 此处是a页面
wx.navigateto({url: 'b?id=1'
})// 此处是b页面
wx.navigateto({url: 'c?id=1'
})// 在c页面内 navigateback,将返回a页面
wx.navigateback({delta: 2
})

实际使用

先看图:

当连续的使用 wx.navigateto 跳转页面之后,最多是跳转10次,再调用就不生效了。

一方面是缓存有限制,另一方面也是要求我们合理的利用缓存吧。

那么如何跳转到之前打开的某个页面呢?

通过官方文档,我们知道传递的参数有一个 delta 属性,是一个数字,应该如何确定这个数字呢?

首先我们输出 getcurrentpages() ,看看里面都有什么;

我注意到,有一个 route 属性,有了这个就好办了!

我们可以根据要跳转的页面的url和页面栈中每一页的 route 属性对比,来计算 delta 的值。

依赖的数据

page({/*** 页面的初始数据*/data: {building:[],//  底部导航curidx: 0,listinfo: [{text: '尊龙凯时官方首页',imgurl: '../images/index.png',cururl: '../images/index1.png',pageurl: '/pages/loupan/loupan'},{text: '咨讯交流',imgurl: '../images/chat.png',cururl: '../images/chat1.png',pageurl: '/pages/chat/chat'},{text: '个人中心',imgurl: '../images/my.png',cururl: '../images/my1.png',pageurl: '/pages/my/my'},]},navigation: function (event) {app.navigation(this.data.listinfo[event.currenttarget.dataset.id].pageurl);}
})

从上面的代码可以看到,使用 listinfo 数组记录每一个页面的url地址;

实际调用

  /*** 根据页面url、页面栈返回之前打开的页面*/navigation:function(pageurl){var cps = getcurrentpages();logger.log(cps);var delta = 0;for (var i = cps.length - 1; i >= 0; i--) {if ("/"   cps[i].route == pageurl) {if (delta == 0) {return;}wx.navigateback({ delta: delta });return;}delta  ;}wx.navigateto({url: pageurl});}

实际调用中,首先获取页面栈,进行一个倒序的遍历;也就是先进后出,后进先出。

如果栈中存在,就返回到已经打开的页面 wx.navigateback;

如果不存在,就导航到新页面 wx.navigateto。

 

还有没有更好的实现方式呢?欢迎各位看官指教!

 


http://www.ngui.cc/el/5127507.html

相关文章

spring boot org.springframework.beans.factory.beannotofrequiredtypeexception

遇到这个问题,有几种可能: 1、项目打包的时候 mapping.xml 没有打包进去 2、项目打包的时候,配置文件没有打包进去 检查: 看看项目的“web-inf/classes”目录下,有没有配置文件。 完整目录示例:e:\depl…

spring-boot日志配置 logging.path logging.file 注意事项

springboot日志配置 logging.path logging.file 注意事项 可能有些小伙伴会同时配置 logging.path 和 logging.file,但是又发现其中一个不生效。 官方文档中有这么一句: if you want to write log files in addition to the console output you need…

springboot 项目不加载 application.properties 配置文件

springboot 项目不加载 application.properties 配置文件 产生原因: 先是创建的springboot2.几版本的项目,结果发现继续使用1.几版本的配置会有很多的问题,于是在pom.xml中把版本改回了1.5.9,然后发现项目启动时并不会加载 application.pro…

融云获取 token 403 问题记录

融云获取 token 方法 参考文档:https://www.rongcloud.cn/docs/server.html#user_get_token 403 问题 最初我们会使用开发环境,随着测试用户的增长,你每次需要申请增加用户数量,但一次只能增加20个。 接着你可能会选择进入生产环境,用户继续增长,接着403问题可能就会出…

对java的map的value字段进行排序

构造treemap可以指定comparator,但是不能对value字段进行排序。如果有需求对value字段排序,例如map存放的是单词,单词出现次数,怎么按单词次数排序呢? 可以先将map中的key-value放入list,然后用collections…

什么是fbclid?新的facebook参数?

继“主机nginx的错误日志分析整理”,由于在站点页面中安装了百度统计,所以可以跟踪访问来源,今天查看发现有一大部分来自于http://www.facebook.com,而具体的外部链接是下面这样的: 有网友提到: 我一直在w…

如何为自己的 csdn博客设置自定义域名?

想实现自定义域名,有几种途径,这里简单介绍一下。 1、csdn官方提供的功能 为了更好的服务于用户,csdn博客推出了自定义域名服务。 如何操作 在“博客配置”中可以进行个性域名配置,设置条件如下: 5-18个字符&…

vnc timed out waiting for a response from the computer

最近在阿里云服务器ecs上安装了图形界面和vnc server,参考:centos6.5下安装远程桌面服务端软件vnc server 但是连接的时候却提示:vnc timed out waiting for a response from the computer 很是奇怪; 因为印象中阿里云服务器ecs要求关闭 security linux,所以没有考虑ce…

vnc server bad display name [xxx]:1 in add command

bad display name "[ip address]:1" in "add" command bad display name "[这里也可能是计算机名称,云服务器的实例名]:1" in "add" command 解决方法如下: (1)vi /etc/hosts &#…

在阿里云服务器ecs centos 6.8上安装图形界面和远程桌面 vnc server

安装图形界面,一句命令搞定: yum -y groupinstall "x window system" "chinese support" "desktop" 启动图形界面: startx 但是在ssh远程连接状态下应该是不会成功的; 设置开机以图形界面启动 …
网站地图