W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
數(shù)據(jù)監(jiān)聽(tīng)器可以用于監(jiān)聽(tīng)和響應(yīng)任何屬性和數(shù)據(jù)字段的變化。數(shù)據(jù)監(jiān)聽(tīng)器自小程序基礎(chǔ)庫(kù)版本 3.105.9 開(kāi)始支持。
有時(shí),需要組合監(jiān)聽(tīng)一些數(shù)據(jù)字段。
例如,this.data.sum永遠(yuǎn)是 this.data.numberA 與 this.data.numberB 的和。此時(shí),可以使用數(shù)據(jù)監(jiān)聽(tīng)器進(jìn)行如下實(shí)現(xiàn)。
代碼示例
Component({
properties: {
numberA: {
type: Number,
value: 0
},
numberB: {
type: Number,
value: 0
}
},
attached: function() {
this.setData({
numberA: 1,
numberB: 2
})
},
observers: {
'numberA, numberB': function (numberA, numberB) {
// 在 numberA 或者 numberB 被設(shè)置時(shí),執(zhí)行這個(gè)函數(shù)
this.setData({
sum: numberA + numberB
})
}
}
});
數(shù)據(jù)監(jiān)聽(tīng)器支持監(jiān)聽(tīng)屬性或內(nèi)部數(shù)據(jù)的變化,可以同時(shí)監(jiān)聽(tīng)多個(gè)。一次setData最多觸發(fā)每個(gè)監(jiān)聽(tīng)器一次。
同時(shí),監(jiān)聽(tīng)器可以監(jiān)聽(tīng)子數(shù)據(jù)字段,如下例所示。
代碼示例
Component({
observers: {
'some.subfield': function(subfield) {
// 使用 setData 設(shè)置 this.data.some.subfield 時(shí)觸發(fā)
// (除此以外,使用 setData 設(shè)置 this.data.some 也會(huì)觸發(fā))
subfield === this.data.some.subfield
},
'arr[12]': function(arr12) {
// 使用 setData 設(shè)置 this.data.arr[12] 時(shí)觸發(fā)
// (除此以外,使用 setData 設(shè)置 this.data.arr 也會(huì)觸發(fā))
arr12 === this.data.arr[12]
},
}
});
如果需要監(jiān)聽(tīng)所有子數(shù)據(jù)字段的變化,可以使用通配符 **。
Component({
observers: {
'some.field.**': function(field) {
// 使用 setData 設(shè)置 this.data.some.field 本身或其下任何子數(shù)據(jù)字段時(shí)觸發(fā)
// (除此以外,使用 setData 設(shè)置 this.data.some 也會(huì)觸發(fā))
field === this.data.some.field
},
},
data: {
some: {
field: {
subfield: [1, 2, 3]
}
}
},
attached: function() {
// 會(huì)觸發(fā) observers
this.setData({
'some.field': {}
});
// 會(huì)觸發(fā) observers
// this.setData({
// 'some.field.xxx': {}
// });
// 會(huì)觸發(fā) observers
// this.setData({
// 'some': {}
// });
}
});
特別地,僅使用通配符**可以監(jiān)聽(tīng)全部 setData。
Component({
observers: {
'**': function(value) {
// 數(shù)據(jù)發(fā)生變化即觸發(fā),這里的 value 是 properties 和 data 的合集
}
}
})
代碼示例
Component({
properties: {
numberA: {
type: Number,
value: 0
},
numberB: {
type: Number,
value: 0
}
},
attached: function() {
this.setData({
numberA: 1,
numberB: 2
});
this.setData({
numberA: 2,
numberB: 3
})
},
observers: {
'numberA, numberB': function (numberA, numberB) {
// 在 numberA 或者 numberB 被設(shè)置時(shí),執(zhí)行這個(gè)函數(shù)
this.setData({
sum: numberA + numberB
})
}
}
});
以上只會(huì)執(zhí)行一次 observers。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: