代码如下:
const db = wx.cloud.database()
Page({
data: {
banner: []
},
onLoad: function () {
let that = this
db.collection('swiper').get({
success: function (res) {
console.log('轮播图获取成功111', res)
that.setdata({
banner: res.data
})
console.log('轮播图获取成功222', res)
},
fail: function (res) {
console.log('轮播图获取失败', res)
},
})
}
});
控制台输出如下:
轮播图获取成功111 {data: Array(3), errMsg: "collection.get:ok"}
VM5313:3 Thu Oct 19 2023 12:05:49 GMT+0800 (中国标准时间) 云开发数据库索引建议
VM5313:4 发起的如下数据库查询经自动检测发现以下问题
(anonymous) @ VM5313:4
(anonymous) @ VM5313:11
VM5313:5 查询语句:
VM5313:6 db.collection('swiper').where({})
.get()
VM5313:8 1. 全量查询告警: 空查询语句可能需扫全表
(anonymous) @ VM5313:8
(anonymous) @ VM5313:11
无法正常给that赋值,第一次读取数据库信息能打印,第二次无法打印。
怎么才能正确赋值,并第二次能正常打印呢?
这个问题是因为在`success`回调函数中,你使用了`that.setdata`,但是`that`并没有被定义。你应该使用`this.setData`来更新页面数据。以下是修改后的代码:
const db = wx.cloud.database() Page({ data: { banner: [] }, getBannerData: function () { db.collection('swiper').get({ success: function (res) { console.log('轮播图获取成功111', res) this.setData({ banner: res.data }) console.log('轮播图获取成功222', res) }, fail: function (res) { console.log('轮播图获取失败', res) }, }) } });
同时,你需要将`this`绑定到`getBannerData`方法上,以便在回调函数中使用它。你可以在`Page`构造函数中添加以下代码:
Page({ data: { banner: [] }, getBannerData: function () { // ... }, onLoad: function () { this.getBannerData(); } });
that.setData({...}),你可以直接打印res.data,看下输出内容,再赋值,确认一下是否是自己要显示的内容
setData 不是 setdata, D 要大写
setData()