如图。
如果我在代码中写
Page({ data: { text: 'init data' , array: [{text: 'init data' }], object: { text: 'init data' } } }) |
如果调用
this .setData({ 'array[0].text' : 'changed data' }) |
按照文档所说,此时, this.data.array[0].text 应该会变成 changed data 。
如果我调用
this .setData({ 'arr[0].text' : 'changed data' , }) |
按照文档所说,此时, this.data.arr[0].text 应该会变成 changed data 。
那如果,我需要 this.data['arr[0].text '] 赋值,应该如何处理?
又或者,这样调用
this .setData({ 'array[0].text' : 'changed data' , 'text' : 'changed text' }) |
这时候,又应该如何进行呢?
选项一:this.data.text === ‘changed text’, this.data.array[0].text === ‘changed data’
选项二:this.data.text === ‘changed text‘, this.data['array[0].text'] === ‘changed data’
(通过实际代码运行结果,是选项一为答案)
参考 lodash 的做法,是 _.set(obj, path, value) ,确定了一定是切割 path 进行数据创建的,但是只局限于一次进行一个 path 的设置。
疑惑就是这个,希望能解答。
最好就是能把内部实现的 setData 代码贴出来,方便查阅。
obj: {
text:
'init data'
}
你这个又怎么赋值呢??
写了个测试代码。
Page({
data: {
text:
'init data'
,
array: [{falg:
false
, text:
'init data'
}],
obj: {
text:
'init data'
}
},
setData1 () {
this
.setData({
'array[0].text'
:
'changed data 1'
,
})
console.log(
this
.data);
},
setData2 () {
this
.setData({
'arr[0].text'
:
'changed data 2'
,
})
console.log(
this
.data);
},
setData3 () {
this
.setData({
'array[0].text'
:
'changed data 3'
,
'arr[0].text'
:
'changed data'
,
'arr[1].text'
:
'changed data'
,
'arr[2]-text'
:
'changed data'
,
'_arr[2]-text'
:
'changed data'
,
'text'
:
'changed text'
,
})
console.log(
this
.data);
},
setData4 () {
this
.setData({
array: [{
text:
'changed data 4'
,
}],
'arr[0].text'
:
'changed data'
,
'arr[1].text'
:
'changed data'
,
'arr[2]-text'
:
'changed data'
,
'_arr[2-text'
:
'changed data'
,
'text'
:
'changed text'
,
})
console.log(
this
.data);
},
setData5 () {
this
.setData({
array: [{
text:
'changed data 5'
,
}]
})
console.log(
this
.data);
},
})
<
view
class
=
"index"
>
<
view
class
=
"index-desc"
>setData 测试</
view
>
<
button
type
=
"default"
bindtap
=
"setData1"
>setData1</
button
>
<
button
type
=
"default"
bindtap
=
"setData2"
>setData2</
button
>
<
button
type
=
"default"
bindtap
=
"setData3"
>setData3</
button
>
<
button
type
=
"default"
bindtap
=
"setData4"
>setData4</
button
>
<
button
type
=
"default"
bindtap
=
"setData5"
>setData5</
button
>
</
view
>