小程序页面的实例使用栈的数据结构存储,栈内元素最多5个(换一种方式说,就是用户最多能点击5次返回),微信小程序能在栈中相对高层某个页面调用其他相对低层的页面实例的方法。

小程序三种页面跳转API 的区别在于:

  • wx.navigateTo 不会将旧页面出栈,会将新页面入栈。(栈内元素个数增加,栈内元素5个时,不能再跳转)
  • wx.redirectTo 会将栈顶的旧页面出栈,再将需要跳转到的页面入栈(栈内元素个数不变);
  • wx.navigateBack 则是将页面栈最后一个元素出栈,因此倒数第二个元素会成为最后一个元素,即变成当前页面;也可以连续出栈好几个元素(大于栈内元素的个数则返回首页)返回栈中的某个页面。

结合下面一个例子对上面的内容的理解:

有一个小程序包含 A、B、C、D 四个页面,A 为首页。小程序启动后,在 A 页面中,此时栈中有一个元素A,我们通过 navigateTo 跳转到 B 页面,然后在 B 页面中再通过 navigateTo 跳转到 C 页面。此时页面栈中就会包含三个元素,分别为 A、B、C 三个页面。而此时如果通过 redirectTo 跳转到 D 页面,redirectTo 会将栈顶页面出栈,即将 C 页面出栈,再将 D 页面入栈,这时候,页面栈中的元素则会变为 A、B、D。此时如果在 D 页面调用 navigateBack,会发现不是返回 C 页面,而是返回到了 B 页面。当然也可以直接在D页面返回A,设置navigateBack的delta参数为2。

特殊情况,减少navigateTo的使用###

描述###

   举个栗子:比如小程序的商城,在用户下单的页面(下面简称:下单界面)很多时候用户需要选择收获地址,然后程序根据用户的选择再返回该界面显示用户选择的收获地址是什么。可能需要在用户的下单界面跳转到地址界面,地址的界面可能有编辑地址之类的操作,用户选择地址后返回下单界面,显示刚刚用户选择的收获地址是什么。这个时候可以采用以下方法,减少navigateTo的使用。很多情况下都会有画圈这样的操作,就是经过一系列的界面后取得数据又返回了原来的界面,这个时候可以使用。

编辑完当前页面返回数据到上一页更新,假设当前在首页A页面,需要跳转到B页面采集用户的选择的数据,然后在返回A界面更新显示。代码例子如下

//A界面

Page({
data: {
userName: ''
}, getBackData: function(name){
this.setData({
userName: name
})
}
})
//B页面
Page({
edtinputname: function (e) {
var name="张三";
var pagelist = getCurrentPages();
if(pagelist.length > 1){
//获取上一个页面实例对象
var prePage = pagelist[pagelist.length - 2];
prePage.getBackData(name); wx.navigateBack({
delta: 1
})
}
})

这样能够使得取得数据但不会增加栈中的元素个数,减少navigateTo的使用

微信小程序wx.navigateTo层叠5次限制,特殊情况的建议的更多相关文章

  1. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

  2. 微信小程序wx.navigateTo页面不跳转

    排查后发现: 若是在全局app.json中配置了tabBar,引用的链接与wx.navigateTo页面跳转url地址相同就无法实现跳转.

  3. 微信小程序——wx.navigateTo点击后没反应

    首先,检查你跳转的目标路径是不是属于tabBar,若属于,且当前页面存在tabBar时,wx.navigateTo方法是失效的. 此时可用wx.switchTab方法,并记得在app.json中的&q ...

  4. 微信小程序wx.request接口

    微信小程序wx.request接口 wx.request是小程序客户端与服务器端交互的接口 HTTPS 请求 一个微信小程序,只能同时(同时不能大于5个)有5个网络请求 wx.request(OBJE ...

  5. 监控微信小程序wx.request请求失败

    在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...

  6. 微信小程序wx.showActionSheet调用客服信息功能

    微信小程序wx.showActionSheet调用客服消息功能 官方文档的代码: wx.showActionSheet({ itemList: ['A', 'B', 'C'], success (re ...

  7. 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决

    微信小程序上传图片的时候,如果是多图片上传,一般都是直接用一个循环进行wx.uploadFile 这个在电脑上面测试与苹果手机上面都不会有什么问题 但当用安卓测试的时候,你会发现小程序会提示一个the ...

  8. 微信小程序wx.request请求用POST后台得不到传递数据

    微信小程序的wx.request请求,method设为POST并向后台传递数据,但从后台返回的信息来看后台并没有获得传递的数据 wx.request({              url: 'url' ...

  9. 坑:微信小程序wx.request和wx.uploadFile中传参数的区别

    微信小程序中通过组件<form>提交表单的时候,在js中通过e.detail.value得到所提交表单的json格式数据.一般提交表单我们都是通过wx.request请求,提交表单数据,通 ...

随机推荐

  1. python发布及调用基于SOAP的webservice

    现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...

  2. 【有意思的BUG】默认置灰的属性的值传递

    数据由Client发送给Server,如下图所示,Server在收到请求后会响应Client. 比如Client发送给Server一组数据:Name:sean&Hobby:movies& ...

  3. HTML5.1 推荐中 1.5.3. Extensibility 段落翻译

    可拓展性 HTML有广泛的可扩展性机制,可用于以安全的方式添加语义: 作者可以使用class属性来扩展元素,有效地创建自己的元素,同时使用最适用的现有的"real"HTML元素,这 ...

  4. 利用Div+CSS整体布局页面的操作流程

    简单的网页布局(Div+CSS)<CSS盒模型+Div嵌套>: <!DOCTYPE html><html> <head>  <meta chars ...

  5. Spark Streaming 调优指南

    SparkStreaming是架构在SparkCore上的一个"应用",SparkStreaming主要由DStreamGraph.Job的生成.数据的接收和导入以及容错四大模块组 ...

  6. Java的static和final关键字的用法

    static关键字的用法 static的意思是"'静态的",在java里面可用于修饰属性和方法. static关键字的应用应注意以下几种情形: 1.static作用于某个字段,一个 ...

  7. log4j配置文件,用时导入jar包buildPAthena、

    log4j.rootLogger=debug,CONSOLE,file#log4j.rootLogger=ERROR,ROLLING_FILElog4j.logger.cn.smbms=debuglo ...

  8. Orleans---持久化

    Orleans配置---持久化 这是Orleans系列文章中的一篇.首篇文章在此 Grain理想的生命周期应该如下图所示: 这就如美国电影中的大反派一样,死了再复活,死了再复活.当然如果复活的反派没有 ...

  9. JavaScript 中的相等性判断

    摘自:MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness: Ja ...

  10. [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示

    javascript面向对象编程方式,对于初学者来说,会比较难懂. 要学会面向对象以及使用面向对象编程,理解对象的创建在内存中的表示,至关重要. 首先,我们来一段简单的对象创建代码 var obj = ...