微信小程序改變頁面顯示setData、修改數組、分頁等學習筆記


一、setData
小程序頁面加載渲染時是通過獲取js文件中Page里面初始化數據data來進行渲染。
js:
  /**
  * 頁面的初始數據
  */
  data: {
    name:'張三',
  },
 
wxml:
  <text>{{name}}</text>
 
結果:

 

 
完成渲染后,直接通過賦值是無法改變頁面中所顯示的數據,只能通過setData來改變(每次最多只能改變1M數據)。
如果通過直接賦值,如:this.data.name = '李四' ,是無法改變頁面的顯示,還會造成視圖層和數據層數據不一致。
在js中onLoad函數中運行this.data.name = '李四' 
  onLoad: function(options) {
    this.data.name = '李四'; // 運行該命令修改data.name
  },
結果無法改變視圖顯示

 

 

正確改變頁面顯示的做法:

js:

運行setData前頁面初始化時的數據:

  /**
  * 頁面的初始數據
  */
  data: {
    name: '張三',
    age: 17,
  },
   

 

運用setData后:
  this.setData({
    name:'李四',
    age:18
  })
  結果:

  

 

二、setData運用場景和方法
  只要需要改變頁面顯示都需要運用setData (請求數據wx.request 后、 交互后 需要改變頁面顯示都需要通過setData 來改變)
  1、改變對象某個屬性
      this.setData({
          ['info.name']: '李四',  // 此時屬性名需要用字符串
          ['info.age']: 18
      })
 
  2、改變數組某個元素或對象屬性
    為了不影響性能不建議一次性更新整個數組(如果數組數據太大),應該只更新某個元素。
 
    確定改變某個元素:  
    let str =`lists[2].name`; // 此時屬性名需要用字符串
    this.setData({
      [str]:李四,
    })
 
     不確定改變的是哪個元素(交互時,用戶點擊數組的某個元素對應改變顯示內容):
     用戶點擊時可以把所點擊的下標傳回進行對應的更改;
      click(i){
        let index=1;
        let str = `lists[${index}].name`;// 此時屬性名需要用字符串
        this.setData({
          [str]:'李四',
        })
       }
 
  3、分頁(適用於上拉加載更多)
    分頁為了避免一次性更新太多數據,建議把數據設計成二維數組如下:
    通過wx:if來渲染。
    每次加載新頁面時在users后面新添加一頁數據即可
      users: [
        [{name: '張三',age: 17}, {name: '張三',age: 17}], // 第一頁數據
        [{name: '張三',age: 17}, {name: '張三',age: 17}]  // 第二頁數據
        。。。。
        [{name: '張三',age: 17}, {name: '張三',age: 17}]  // 第n頁數據
      ]
 
      let str = `users[${page}]`;
      let datas=[{name: '張三',age: 17}, {name: '張三',age: 17}];  // 第n頁數據
      this.setData({
        [str]:datas
      })
 
    wxml:
    <block wx:for="{{users}}">
      <view wx:for="{{item}}" wx:for-item="userItem">
        <text>{{userItem.name}}</text>
        <text>{{userItem.name}}</text>
      </view>
    </block>
 
 
以上是本人初學小程序的筆記,如有錯誤請指出
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM