1. 程式人生 > >微信小程式如何使用setData修改data中子物件的屬性值

微信小程式如何使用setData修改data中子物件的屬性值

在微信小程式開發中資料與頁面的繫結是靠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啦~
切記:使用時要把那個變數用中括號([])括起來

雖然是小知識點,但用處肯定大大地。。假如不會這個的話,就無法修改子物件的屬性值,最笨的方法是,把這個物件重新賦值一遍。物件屬性個數少了還好說,要是碰到一個物件的屬性超級多,而你只是為了修改其中一個屬性就把所有值賦值一遍,那也是傻的可以啊>_<。