开发 | 如何在微信小程序的页面间传递数据?

咱们在以前发布太小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法。小程序

本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有关页面间数据传递的更多方法。微信小程序


文 | 小日子先生缓存

在微信小程序的开发中,咱们会常常遇到页面间数据传递或者相互影响的问题。在实际的开发过程当中,能够经过如下几种方法来实现。微信

使用全局变量

全局变量其实是定义了一个全局的对象,并在每一个页面中引入。app

在初始化代码的时候,小程序会读取一个 app.js 的文件,在这里咱们能够定义咱们所须要的全局变量。less

//app.js ... App({ globalData : { foo : 'bar' } });

而后在页面中,能够经过 getApp() 方法获取到全局应用对象,能够对全局变量进行读取并更改:this

//page.js ... var app = getApp() var getFoo = app.globalData.foo app.globalData.foo = 'fun'

因为 app.js 在项目中是用来作基础配置的,所以不建议将不少变量放在这里配置。通常状况下会将一些持久化的常量配置在这里,对于常常须要变更的量不建议用这个方法。url

使用本地缓存

本地缓存是微信小程序提供的一个功能,能够将用户产生的数据作本地的持久化,相似于 NoSQL,能够进行读取和修改的操做。spa

那么在不一样的页面之间,如何利用它,进行数据的交互呢?code

假设咱们在 A 页面保存了用户的信息。

// pageA.js ... var developer = { name: 'raymond', gender: 'male' } wx.setStorageSync('developer', developer);

这样作,这个数据就存在了本地。当在 B 页面须要使用的时候,能够直接的获取到数据池中的数据,并进行 CRUD 操做:

//pageB.js ... // Retrieve var developer = (wx.getStorageSync('developer') || []) // Update developer.name = 'Jiayang' wx.setStorageSync('developer', developer); // Delete wx.removeStorage({ key: 'developer' })

须要注意的是,在回到 A 页面的时候,小程序须要从新读取数据。这时候,能够选择放在生命周期的 onShow 中对数据从新加载

父级往子级页面(模板)的数据传递

咱们一般会在页面之间进行跳转、重定向的操做。这时候,咱们能够选择将部分数据放在 url 里面,并在新页面 onLoad 的时候进行初始化。

pageC.js ... // Navigate wx.navigateTo({ url: '../pageD/pageD?name=raymond&gender=male', }) // Redirect wx.redirectTo({ url: '../pageD/pageD?name=raymond&gender=male', })

在 D 页面中,咱们能够这样接收到到所传进来的参数:

// pageD.js ... Page({ onLoad: function(option){ console.log(option.name + 'is' + option.gender) this.setData({ option: option }) } })

wx.navigateTo 和 wx.redirectTo 不容许跳转到 tab 所包含的页面,只能用 wx.switchTab 跳转。须要注意的是,wx.switchTab 中的 url 不能传参数。

微信新提供的 wx.reLaunch 接口能够传入参数。

另外,在页面中咱们一般会用到一些组件模板,所以在父子之间也会有相应的数据传递。

使用 name 属性,做为模板的名字。而后在这里面使用 is 属性,声明须要的使用的模板。

{{index}}: {{msg}}
Time: {{time}}

而后将模板所须要的 data 传入,如:

<template is="msgItem" data="{{...item}}"/>
Page({ data: { item: { index: 0, msg: 'this is a template', time: '2016-09-15' } } })

传入模板的除了变量,还能够是事件方法对象。例如,模板中的点击事件,能够传递到使用模板的元素中。

经过获取到页面对象进行数据操做

这个方法的精髓,是经过获取到其余页面的对象原型,而后经过原型方法 setData 对当前对象管理的 data 进行修改,示例以下:

//pageE.js ... Page({ data: { index: 1 } })

当跳转到下一个页面 F 以后,假定在 F 中有操做须要对 E 中的数据有修改,则可使用如下方法:

pageF.js
...
Page({
  changeIndexInE: function(){ var pages = getCurrentPages(); var prevPage = pages[pages.length - 2]; prevPage.setData({ index: 0 }) } })

这个方法能够操做页面堆栈里面的页面的数据,能够作到让后一级页面对上级页面群的数据管理。

小结

在微信小程序中有以上而且不局限于以上几种的方式进行页面间数据传递、交互,在实际应用中能够组合使用。好比说:

  • 一些常量,能够交由 app.js 管理;须要持久化的量能够放在本地保存。
  • 涉及到下级页面或者模板元素的数据,能够经过传入参数的方式传入。
  • 后级页面能够经过获取堆栈里的页面对象快速修改上级的数据。

在实际应用中结合使用,能够更好地管理小程序的数据。

本文若有不周到之处,能够留言进行讨论。

相关文章
相关标签/搜索