小程序页面传值的方式:

1.正向传值:上一页面 -->  下一页面

  1. url传值
  2. 本地储存
  3. 全局的app对象

2.反向传值:下一页面 -->  上一页面

  1. 本地储存
  2. 全局的app对象

先说一下正向传值:

1.url传值:

通过url传值的需要通过option来获取参数值。

更多详情可以访问小程序-navigateTo章节

A页面:

wx.navigateTo({
url: 'test?id=1'
})

B页面:

Page({
data:{
id:'',
},
onLoad: function(option){
this.setData({
id:option.id
})
}
})

2.本地存储:

关于缓存,可以先访问小程序-数据缓存稍作了解。

A页面:

wx.setStorageSync('username', 'ddd')

B页面:

Page({
data:{
username:'',
},
onLoad: function(){
var username = wx.getStorageSync('username')
this.setData({
username: username
})
}
})

3.全局的app对象

关于app对象,可以访问小程序-注册程序了解相关信息。

A页面:

var app = getApp();
app.username='ddd';

B页面:

var app = getApp();
var username = app.username;

再说一下反向传值,看了上面那几种方法,聪明的你应该知道反向传值有哪几种方式了。对,就是方法2和方法3:

1.本地存储:

B页面:

wx.setStorageSync('username', 'ddd');
//返回上一页
wx.navigateBack();

A页面:

Page({
data:{
username:'',
},
onShow: function(){
var username = wx.getStorageSync('username')
this.setData({
username: username
})
}
})

2.全局的app对象

B页面:

var app = getApp();
app.username='ddd';

A页面:

var app = getApp(); 

Page({
data:{
username:'',
},
onShow: function(){
var username = app.username;
this.setData({
username: username
})
}
})

3.在当前页通过获取前一个 page 实例,再赋值

var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
//直接调用上一个页面的 setData() 方法,把数据存到上一个页面中去
prevPage.setData({
mdata:1
})

这种方法的弊端:因为进入 B 页面的入口可能是很多个。这样做,可能会导致获取到的页面实例不正确。

4.通过onfire.js为来实现这个效果

onfire.js的下载地址https://github.com/hustcc/onfire.js

使用思路:

  1. A 页面先订阅一个事件,并定义处理方法;
  2. 从 B 页面返回时,发送消息;
  3. A 页面卸载时,解除订阅。

使用方法如下:

A页面代码如下:

var onfire = require("../utils/onfire.js");
var that;
var eventObj = onfire.on('key', function () {
// 当消息被传递时,做具体的事
});
Page({
data: {
},
onLoad: function(options) {
// Do some initialize when page load.
},
onReady: function() {
// Do something when page ready.
},
onUnload: function (e) {
onfire.un('key');
onfire.un(eventObj);//移除
}
})

我们可以在 A 页面直接调用 onfire.on 方法,订阅一个名字为 key 的消息。在上面的代码中,消息附带的参数无传参。 
如果需要传参的话,直接在 function 里增加参数即可,例如:

var eventObj = onfire.on('key', function (data){
// 执行操作
})

需要注意的是,一定要在 onUnload 里(在页面被关闭时)取消订阅消息,并取消绑定 eventObj。

B 页面里代码在回调的地方加入以下代码:

onfire.fire('key');//key 为上文中订阅的消息
// 有参数时
onfire.fire('key','test')

方法介绍完毕。各位看官好好享用~

参考文章:

小程序2个页面如何接传值

一个 JS 库就能解决小程序跨页传递事件消息和数据

微信小程序——页面之间传递值的更多相关文章

  1. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  2. 让微信小程序页面之间的通信不在变得困难

    一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品 ...

  3. 微信小程序页面之间的跳转

    一.使用标签跳转             index.wxml:             在index.wxml页面添加一个<navigator>元素,在元素里面使用属性url就可以 二. ...

  4. 微信小程序--页面与组件之间如何进行信息传递和函数调用

    微信小程序--页面与组件之间如何进行信息传递和函数调用 ​ 这篇文章我会以我自己开发经验从如下几个角度来讲解相关的内容 页面如何向组件传数据 组件如何向页面传数据 页面如何调用组件内的函数 组件如何调 ...

  5. [转] 微信小程序页面间通信的5种方式

    微信小程序页面间通的5种方式 PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个 ...

  6. ASP.NET页面之间传递值的几种方式(转载)

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  7. ASP中页面之间传递值的几种方式

    ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryS ...

  8. 微信小程序页面跳转方法总结

    微信小程序页面跳转目前有以下方法(不全面的欢迎补充): 1. 利用小程序提供的 API 跳转: // 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.// 注 ...

  9. spring boot 之如何在两个页面之间传递值(转)

    原文地址:spring boot 之如何在两个页面之间传递值 问题:页面之间的跳转,通常带有值的传输,但是,在现在比较流行的SPRING MVC WEB 开发模型中,设计机制导致页面之间的直接接跳转和 ...

随机推荐

  1. Feign请求中报错:Request header is too large 的解决方案。

    现在我们项目中都已迁入spring boot和spring cloud. 服务间调用现在都改成feign的调用方式,但是上次在实际使用过程中出现过:Request header is too larg ...

  2. 如何使用 Chrome 浏览器调试动态加载的 Javascript 脚本

    在IE中,可以在调试程序的文档列表最下方看到一个"动态脚本"的文件夹,里面可以找到动态加载的脚本,但是...数量繁多,也不能自定义名称... 但是在 Chrome 中,貌似根本找不 ...

  3. 用“网建”平台发手机短信的C#代码

    一直都用这个平台发手机短信的,今天做新项目的时候用到了,但是上来博客搜索不到,只好翻以前的源代码翻了好久才找到了,先记下来,以作备用: using System; using System.Colle ...

  4. Mac OS X 10.8.5 安装编译glib

    过程比较坎坷,就此记录一番一遍后人 1. 下载pkg-config然后解压安装: ./configure make -j 24 sudo make install 2.下载libiconv解压安装 . ...

  5. css3动画制作工具

    1.从chrome webstore下载 chrome应用商店安装地址 2.直接下载crx文件 如果无法访问到chrome的应用商城,可以选择下载app.crx文件,在chrome中打开chrome: ...

  6. lua笔记二 赋值语句

    赋值是改变一个变量的值和改变表域的最基本的方法. a = "hello" .. "world" t.n = t.n + 1 Lua可以对多个变量同时赋值,变量列 ...

  7. Mac安装mtr与brow安装

    Mac安装mtr与brow安装 Mac里比较好的安装mtr方式是用Homebrew 或者MacPorts,本来想安装Homebrew,但大概是GFW的问题,下载地址无法访问,因为没有全局FQ,暂时不考 ...

  8. kafka配置参数详解【收藏】

    3.1      Broker  Configs 基本配置如下: -broker.id -log.dirs -zookeeper.connect Topic-level配置以及其默认值将在下面讨论. ...

  9. mysql load数据第一列丢失

    mysql load数据第一列丢失 问题描述 MySQL表的结构如下: mysql> desc cms_msg_test_3; +----------------+--------------- ...

  10. Zookeeper session超时

    1.会话概述 在ZooKeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SESSION_TIMEOUT ...