微信小程式如何使用setData修改data中子物件的屬性值
阿新 • • 發佈:2019-01-09
在微信小程式開發中資料與頁面的繫結是靠data物件來實現的。如果要修改頁面中某個變數的值,就需要使用this.setData({變數名:值})。
比如,點選按鈕修改變數值:
change:function(e){
this.setData({
test:'hello world!'
})
}
但是如果要修改data中子物件的屬性值呢?一個很自然的想法是多點幾次不就行了?比如person.name
this.setData({
person.name:'fxjzzyo'
})
但是,很遺憾不能這樣做啦!!QAQ,上面是錯誤示範啦!!!
會報錯啊=_=QAQ
難道為了更改其中一個屬性,就只能把一個物件的所有屬性都setData一遍嗎?
呵呵,當然不是啦。山人自有妙計也。
只需要用一個字串拼接處前面的屬性名就ok啦~
且看下面的栗子~
例如:
頁面程式碼test.wxml:
<view class='page'>
<view>{{test}}</view>
<button bindtap='change'>修改test為hello world!</button>
<view>{{person.name}}</view>
<button bindtap='changePerson'>修改人名為fxjzzyo</button>
</view>
邏輯程式碼test.js:
Page({
/**
* 頁面的初始資料
*/
data: {
test:'test',
person:{
name:'jay',
age:12,
address:'china',
like:'sing song',
phone:'123456'
}
},
change:function(e){
this.setData({
test:'hello world!'
})
},
changePerson:function(e){
var str = 'person.name';
this.setData({
[str]: 'fxjzzyo'
})
},
/**
* 生命週期函式--監聽頁面載入
*/
onLoad: function (options) {
}
})
重點在changePerson這個方法中:
changePerson:function(e){
var str = 'person.name';
this.setData({
[str]: 'fxjzzyo'
})
},
很easy啦,只需要把原本要寫的person.name:’fxjzzyo’前面的person.name用一個字串變數拼接出來就ok啦~
切記:使用時要把那個變數用中括號([])括起來
雖然是小知識點,但用處肯定大大地。。假如不會這個的話,就無法修改子物件的屬性值,最笨的方法是,把這個物件重新賦值一遍。物件屬性個數少了還好說,要是碰到一個物件的屬性超級多,而你只是為了修改其中一個屬性就把所有值賦值一遍,那也是傻的可以啊>_<。