# 开发 \| 如何在小程序页面之间，传递数据和变量？

- 作者：知晓程序
- 发布时间：2017-04-27 13:10
- 原文：https://www.ifanr.com/minapp/826237

![](https://s3.ifanr.com/wp-content/uploads/2017/04/ttct.jpg)

文 \| Angeladaddy

最近组里开发小程序，遇到了一个困扰前端很长时间的话题：**页面之间，如何传递数据和变量？**

刚开始，我们选择使用路径传参解决。但是众所周知，各浏览器 HTTP Get 请求 URL 最大长度并不相同，大部分浏览器只能接受 7000 个字符的数据。

所以，我们觉得这个方式并不靠谱。

研究了一下官网，**发现有两种方式可以「比较优雅」地完成这个任务。**

### 使用全局变量

在项目 `app.js` 中定义 `globalData`（全局变量）。

```
<span class="hljs-selector-tag">App</span>({
 <span class="hljs-attribute">globalData</span>:{
   userInfo:<span class="hljs-string">'angeladaddy'</span>
  }
});
```

在需要的地方，我们可以随意调用这个全局变量。

```
getGlobalVar:<span class="hljs-function"><span class="hljs-keyword">function</span>()</span>{
  <span class="hljs-keyword">var</span> that=<span class="hljs-keyword">this</span>;
  that.setData({
    <span class="hljs-attr">globalvar_str</span>:<span class="hljs-built_in">JSON</span>.stringify(getApp().globalData)
  }) 
}
```

当然，赋值也是没问题的。

```
onLoad:<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(options)</span></span>{
 getApp().globalData.userInfo+=<span class="hljs-string">' is an awesome man'</span>;
},
```

来试试效果：

![](https://s3.ifanr.com/wp-content/uploads/2017/04/Artboard-11.jpg)



### 使用模板

在官方文档中，模板的使用需要先定义一个模板，要用到 `name` 属性。

```
<span class="xml"><span class="hljs-tag"><<span class="hljs-name">template</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"msgItem"</span>></span>
  <span class="hljs-tag"><<span class="hljs-name">view</span>></span>
    <span class="hljs-tag"><<span class="hljs-name">text</span>></span> </span><span class="hljs-template-variable">{{index}}</span><span class="xml">: </span><span class="hljs-template-variable">{{msg}}</span><span class="xml"> <span class="hljs-tag"></<span class="hljs-name">text</span>></span>
    <span class="hljs-tag"><<span class="hljs-name">text</span>></span> Time: </span><span class="hljs-template-variable">{{time}}</span><span class="xml"> <span class="hljs-tag"></<span class="hljs-name">text</span>></span>
  <span class="hljs-tag"></<span class="hljs-name">view</span>></span>
<span class="hljs-tag"></<span class="hljs-name">template</span>></span></span>
```

接着，使用模板和 `is` 属性，声明需要的使用的模板，然后将模板所需要的 `data` 传入。比如这样：

```
<<span class="hljs-keyword">template</span> <span class="hljs-keyword">is</span>=<span class="hljs-string">"msgItem"</span> data=<span class="hljs-string">"{{...item}}"</span>/>
```

给 `item` 赋值，以显示模板数据。

```
<span class="hljs-selector-tag">Page</span>({
<span class="hljs-attribute">data</span>: {
 <span class="hljs-attribute">item</span>: {
   <span class="hljs-attribute">index</span>: <span class="hljs-number">0</span>,
   <span class="hljs-attribute">msg</span>: <span class="hljs-string">'this is a template'</span>,
   <span class="hljs-attribute">time</span>: <span class="hljs-string">'2016-09-15'</span>
 }
}
})
```

这样就「duang」地一下，解决了页面传值问题。

另外，既然小程序可以使用 ES6 的所有特性，那么那个 `var that=this` 又是什么鬼？为何不能用箭头函数解决作用域问题？大家可以自行尝试一下。

**本文由知晓程序授权转载，关注微信号 zxcx0101，在微信后台回复「带参二维码」，获取生成小程序带参二维码教程。**

![zxcx&#95;0208](https://s3.ifanr.com/wp-content/uploads/2017/02/zxcx_0208.png)
