微信小程序之数据传递
特定元素上的数据获取
这种情况最常见于点击某个对象,通过获取该对象的id请求api获取该对象的详细数据。我们来看一下如何获取点击对象的数据。
事先准备:先建两个页面hello和world,通过点击hello页面上的按钮跳转到world页面。
数据获取步骤:
- 对组件通过
data-xxx="xxx"
赋值 - 通过
event.currentTarget.dataset.xxx
或event.target.dataset.xxx
获值
在我的例子中,我现在hello.wxml页面中添加
1 | <button data-id="a" bindtap="toWorld">A跳转到world页面</button> |
在hello.js中添加
1 | Page({ |
我分别点击两个按钮。
页面跳转数据传递
继续使用上述例子,在hello.js中添加跳转功能,在跳转时传递数据
1 | Page({ |
?后面写完参数记得加=,我发现自己老是忘记,然后找了半天为什么数据没有传输成功。
我们看一下官方文档
所以我们在world.js中添加
1 | Page({ |
然后在world.wxml中修改一下页面
1 | <text>World页面</text> |
重新编译,测试结果。
模板数据的传递
主要是在template中使用
1 | data="{{数据}}" |
- 获取数据
这里我们就自定义数据。在hello.js中添加
1 | onLoad: function(options){ |
- 模板的生成与引用
先建个模板,随便起名,我的叫content。在content-template.wxml中添加
1 | <template name="contentTemplate"> |
在hello.js中引用模板,别忘了import
1 | <template is="contentTemplate" data="{{...content}}" /> |
我们可以看到使用
1 | data="{{}}" |
这里的三个点…是指展开该数据对象,这样我们就可以在模板中直接数据绑定对象里的key。
大小写
在“特定元素上的数据获取”章节中,我们使用了event.currentTarge.dataset.id
,如果我们在wxml中使用了驼峰式的命名方法,那应该如何取值呢?很多人第一反应是也是用驼峰式,其实不是,要使用全部小写的方式。
重建一个项目,跟上一个差不多
在hello.js中,错误写法
1 | getId: function(event){ |
这时控制台输出的结果是undefined。
需要改为
1 | getId: function(event){ |
这时才能正确取值。
currentTarget与target
区别:
event.currentTarget
返回绑定事件的元素event.target
返回触发事件的元素
我们已经接触过第一个,它返回绑定事件的元素,比如我在button中注册了一个onMyTap事件,那在js中的onMyTap(event)中的event.currentTarget指的就是绑定了该事件的button对象。
那第二个呢?
举个例子:
修改hello.wxml为
1 | <view> |
在hello.js中
1 | onSwiperTab:function(event){ |
我们发现绑定事件的元素是swiper父组件,而触发事件的是其子组件swiper-item,因此target的作用就是如此。