[关闭]
@heqinglin 2018-05-21T08:17:33.000000Z 字数 1333 阅读 46

小程序开发相关

微信小程序


setData()

setData其一般调用格式是 setData(data, callback),其中data是由多个key: value构成的Object对象。

  1. // page.js
  2. Page({
  3. onLoad: function(){
  4. this.setData({
  5. text: 'change data'
  6. }, function(){
  7. // 在这次setData对界面渲染完毕后触发
  8. })
  9. }
  10. })

实际在开发的时候,页面的data数据会涉及相当多的字段,你并不需要每次都将整个data字段重新设置一遍,你只需要把改变的值进行设置即可,宿主环境会自动把新改动的字段合并到渲染层对应的字段中,如下代码所示。
data中的key还可以非常灵活,以数据路径的形式给出,例如

  1. // page.js
  2. Page({
  3. data: {
  4. a: 1, b: 2, c: 3,
  5. d: [1, {text: 'Hello'}, 3, 4]
  6. }
  7. onLoad: function(){
  8. // a需要变化时,只需要setData设置a字段即可
  9. this.setData({a : 2})
  10. }
  11. })
  1. this.setData({"d[0]": 100});
  2. this.setData({"d[1].text": 'Goodbye'});

key要写成字符串形式,否则会报错

我们只要保持一个原则就可以提高小程序的渲染性能:每次只设置需要改变的最小单位数据。

案例:自定义多选框setData()选中数据

  1. Page({
  2. data: {
  3. checkboxItems: [
  4. { name: 'USA', value: '美国' },
  5. { name: 'CHN', value: '中国', checked: 'true' },
  6. { name: 'BRA', value: '巴西' },
  7. { name: 'JPN', value: '日本', checked: 'true' },
  8. { name: 'ENG', value: '英国' },
  9. { name: 'TUR', value: '法国' },
  10. ]
  11. },
  12. checkboxChange: function (e) {
  13. var checked = e.detail.value //['中国','日本']
  14. var changed = {}; //定义一个空对象,用for循环把要更改的属性键值循环出来
  15. for (var i = 0; i < this.data.checkboxItems.length; i++) {
  16. if (checked.indexOf(this.data.checkboxItems[i].name) !== -1){
  17. changed['checkboxItems[' + i + '].checked'] = true
  18. } else {
  19. changed['checkboxItems[' + i + '].checked'] = false
  20. }
  21. }
  22. this.setData(changed)
  23. /**changed = {
  24. checkboxItems[0].checked:true,
  25. checkboxItems[1].checked:true,
  26. checkboxItems[2].checked:false,
  27. checkboxItems[3].checked:true,
  28. checkboxItems[4].checked:false,
  29. checkboxItems[5].checked:false
  30. }**/
  31. }
  32. })
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注