1. 程式人生 > >微信小程式——使用setData修改陣列中的單個物件

微信小程式——使用setData修改陣列中的單個物件



微信小程式已經出來挺久的時間了,之前只是在文件上粗略的看了一下,最近稍得空閒,便利用微信小程式平臺寫一個練手的專案,順便學習一下小程式開發,感覺大體跟前端開發基本類似,但是因為是在微信的平臺上執行,具體還是要根據小程式的規則來編寫程式碼的,其中還是有部分的內容跟前端中常見的有所不同,於是接下來的部落格裡,也會順手記錄微信小程式開發過程中的一些坑,幫助後來的小程式開發者少踩一些坑,當然我踩的坑大部分都是以前的開發者踩過的,我所做的也僅僅是記錄,分享。

習慣使用Vue或者React這類框架的開發者們,肯定不會對修改data內中陣列的單個物件而煩惱,因為這些框架已經幫我們很好的處理了這個問題,並且在文件上也寫的非常清楚。

比如要求是有一個數組存放了購物車的商品資訊,而你在購物車內修改了單個商品的期望購買數量後,我們就要動態的更新這個單個物件的購買數量值,如果在小程式裡我們會怎麼做呢?

如果你按照Vue的寫法來實現的話,不出意外會失敗。而微信小程式也只給我們提供了一個setData方法,這個方法是使用鍵值對的形式對資料進行修改,例如:

this.setData({
    name : 'leon'
})

回到我們剛剛的例子裡,這時候,如果你想修改單個商品的數量資訊,應該怎麼寫?

首先展示一種錯誤的寫法:

Page({
  data: {
    array: [{text: 'init data'}],
 },
  changeItemInArray: function (index) {
 this.setData({
 'array['+index+'].text':'changed data'
 })
 }
})

如果這樣動態的寫index,很顯然,這樣是無法使用在物件的key中的,我相信小程式的新手開發者可能嘗試過這樣的寫法。

那麼正確的寫法究竟是怎麼樣的呢?

changeItemInArray: function (index) {

 // 提前準備好物件
 var item = this.data.list[index]

  item.count = 100

 // 依舊是根據index獲取陣列中的物件
 var key = "list["+ index + "]"

 this.setData({
 // 這裡使用鍵值對方式賦值
    key: item 
 }, function () {})
}

最後,希望以後的小程式版本更新中,有更好的賦值方法。希望這篇文章能幫助到小程式的新手開發者。