在微信小程序页面间传递数据的5种方式

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

使用全局变量

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

在初始化代码的时候,小程序会读取一个 app.js 的文件,在这里我们可以定义我们所需要的全局变量。

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

然后在页面中,可以通过 getApp() 方法获取到全局应用对象,可以对全局变量进行读取并更改:

//page.js...varapp = getApp()vargetFoo = app.globalData.fooapp.globalData.foo='fun'

由于 app.js 在项目中是用来做基础配置的,因此不建议将很多变量放在这里配置。一般情况下会将一些持久化的常量配置在这里,对于经常需要变动的量不建议用这个方法。

使用本地缓存

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

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

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

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

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

//pageB.js...// Retrievevardeveloper = (wx.getStorageSync('developer') || [])// Updatedeveloper.name ='Jiayang'wx.setStorageSync('developer', developer);// Deletewx.removeStorage({  key:'developer'})

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

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

我们通常会在页面之间进行跳转、重定向的操作。这时候,我们可以选择将部分数据放在 url 里面,并在新页面 onLoad 的时候进行初始化。

pageC.js...// Navigatewx.navigateTo({url:'../pageD/pageD?name=raymond&gender=male',})// Redirectwx.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 传入,如: