在微信小程序中如果使用了wx:for进行渲染时,由于同时生成了很多一样的dom。这时候如果想知道当前处理的是哪个对象,则需要在事件中进行传参,方法如下:
<view data-xxx="{{xxx}}" bindonchange="bindOnChange">
</view>
此时,当触发bindOnChange
事件时,便可以在 C 中接收到使用data-xxx
传入的参数了.
bindOnChange(e) {
console.log(e.currentTarget.dataset.xxx);
console.log(e.target.dataset.xxx);
}
但是不知道微信出于什么目的,当使用data-xxx
来绑定数据时,竟然使用的不是地址传递,取而代之是进行值复制。比如:
data: {
xxx: {value: 123}
},
bindOnChange(e) {
const xxx = e.currentTarget.dataset.xxx;
xxx.value = 234;
console.log(this.data.xxx.value); // 结果仍然是123
}
我想没有使用简单的地址传递而是取而代之了更复杂的值传递可能是为了照顾新手或是降低小程序框架的难度吧。
另外还有个小坑是,它的语法是:data-xxx="{{foo}}"
,此时它会复制C层(实际上应该是 C 层中的数据复制(非值传递)到了 V 层)中的data.foo
复制过去。如果语法不小心写成data-xxx="foo"
, 那么此时的foo
将做为字符串处理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。