解决办法 为复制一份this的指向到变量中,这样在函数执行过程中虽然this改变了,但是that还是指向之前的对象。
大家知道this是指当前对象,只是一个指针,真正的对象存放在堆内存中,this的指向在程序执行过程中会变化,因此如果需要在函数中使用全局数据需要合适地将this复制到变量中。
this作用域分析:
1.在Page({})里面,this关键字指代Page({})整个对象
2.因此可以通过this关键字访问或者重新设置Page({})里data的变量
3.然而在loadData函数中使用了wx.request({})API这个方法导致在wx.request({})里没办法使用this来获取Page({})对象
4.虽然在wx.request({})里没法使用this获取Page({})对象,但是可以在wx.request({})外面先把this存在某个变量中,所以就有了 var that =this 这个声明。此时that指代Page({})整个对象,这样子就可以在wx.request({})里使用that访问或者重新设置Page({})里data的变量
微信小程序 setData常用错误解决办法:
1、微信小程序中,在wx.request({})方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报undefiend。
原因是,在javascript中,this代表着当前对象,会随着程序的执行过程中的上下文改变,在wx.request({})方法的回调函数中,对象已经发生改变,所以已经不是wx.request({})方法对象了,data属性也不存在了。官方的解决办法是,复制一份当前的对象,如下:
var that=this//把this对象复制到临时变量that。在success回调函数中使用that.data就能获取到数据了。
2、下面就是修改代码,必须setData一下,不然地图不会刷新。
markers: { iconPath:
"/picture/bike.png", id: 0, latitude: 23.099994, longitude:
113.324520, width: 50, height: 50 }
for(var i = 0i <res.data.lengthi++){ //
that.data.markers[i].id=i // mark.id=i var param =
{} var string = "markers["+i+"].id" param[string] =
res.data[i].Bike_id that.setData(param)
var string="markers["+i+"].iconPath" param[string]
="/picture/bike.png" that.setData(param) var
string = "markers["+i+"].latitude" param[string] =
res.data[i].BIKE_latitude that.setData(param)
var string = "markers["+i+"].longitude"
param[string] = res.data[i].BIKE_longitude
that.setData(param) var string =
"markers["+i+"].width" param[string] = 50
that.setData(param) var string = "markers["+i+"].height"
param[string] = 50 that.setData(param)
/* that.setData({ markers:[{ iconPath:
"/picture/bike.png", id: 0, latitude: 23.099994, longitude:
113.324520, width: 50, height: 50 }] })*/
} // console.log(res.data[1]) var
markk=that.data.markers that.setData({markers:markk})
小程序setData()设置,百度找到: http://www.jb51.net/article/111691.htm
在微信小程序中,可以利用 `setInterval()` 函数来实现长时间计时的功能。具体步骤如下:
1. 在需要计时的页面或组件中定义一个计时器变量,如 `timer`,并初始化为 0。
2. 使用 `setInterval()` 函数,在一段时间间隔内执行一次指定的函数(比如每秒钟执行一次),并将返回值赋给计时器变量,如:
```
timer = setInterval(function() {
// 在这里编写计时器的逻辑
}, 1000)// 以毫秒为单位,表示每秒钟执行一次
```
3. 在计时器函数中编写计时器的逻辑,如:
```
var second = 0// 定义一个秒数变量
function timerFunction() {
second++// 每秒钟秒数加一
console.log("已经计时了 " + second + " 秒")
}
```
4. 当需要停止计时器时,可以使用 `clearInterval()` 函数来清除计时器,如:
```
clearInterval(timer)// 停止计时器
```
完整示例代码:
```
var timer// 计时器变量
Page({
data: {
second: 0 // 秒数
},
onLoad: function () {
this.startTimer()// 页面加载时启动计时器
},
startTimer: function () {
var that = this
timer = setInterval(function() {
that.setData({
second: that.data.second + 1 // 每秒钟秒数加一
})
console.log("已经计时了 " + that.data.second + " 秒")
}, 1000)// 以毫秒为单位,表示每秒钟执行一次
},
stopTimer: function () {
clearInterval(timer)// 停止计时器
}
})
```
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)