appdata里有数据
console里面有数据
这个是源码
const db=wx.cloud.database()
Page({
data: {
ranking_list:[]
},
onLoad(){
db.collection('users').orderBy('ranking_data.done_sum','desc')
.get({
success:res=>{
for(let i=0;i<res.data.length;i++)
{
this.data.ranking_list.push({_id:res.data[i]._id,imgURL:res.data[i].imgURL,name:res.data[i].name,ranking_data:res.data[i].ranking_data})
console.log(this.data.ranking_list)
}
}
})
}
)}
<view wx:for="{{ranking_list}}" wx:key="*this">
<view>{{item._id}}</view>
</view>
难道是数据还没有开始获取,wxml就已经渲染完成了吗?????????
需要用 this.setData 才会更新UI
this.setData({
ranking_list: ****
})
{
this.data.ranking_list.push({_id:res.data[i]._id,imgURL:res.data[i].imgURL,name:res.data[i].name,ranking_data:res.data[i].ranking_data})
console.log(this.data.ranking_list)
}
加上:
let rankingList= this.data.ranking_list
this.setData({
ranking_list: rankingList
})
1、要想UI有变化,有且只有this.setData
改变数据时,需要通过setData这个api,才能将逻辑层数据渲染到视图层
这就是啊,代码变个写法就不会了,没有this.setData
看来你不太理解小程序的渲染机制,UI和JS是相互独立双线程运行的,它不是Vue那样的双向绑定。
页面第一次渲染时会拿data预设数据来渲染。后续的运行时渲染必须通过this.setData把逻辑层JS数据传递给试图层线程。直接this.data里赋值是无效的。
但是如果我在js里面对ranking_list这么定义,他就。。。。
data: {
ranking_list:[{_id:1}]
},
有结果。。。