this关键字
回调函数中的this:
我们首先看一段代码
JavaScript:
sucess: function(res){
this.setData({
test:'HelloWorld!'
})
}
wxml:
<view>{{test}}</view>
写完之后你在wxss端看不到test的任何变化?
而且还会报错。。。
这是为什么呢?
原因就是你没有理解this的含义…
如果你这样写就可以:
就是不在sucess回调函数中写setData()
example: function(){
this.setData({
test:'HelloWorld!'
})
}
这就很奇怪,朋友们!
现在就能说明一个问题了
回调函数中的this和其他函数中的this所指代的对象不一样!!
根据我的分析和认识:
回调函数中的this指的是回调函数本身,所以你这样搞肯定是不行的。
这和你渲染的数据是匹配不到的
而我们普通函数它里面你写this的话它指代的是整个windows窗体,
所以我们就能对窗体下的一些绑定的数据进行渲染
好了我们知道了问题的所在,那我们如何解决呢?
我们现在不能在回调函数中使用this了因为它已经指代的不是Windows窗体了。但是我们可以在回调函数之外写一个变量that来接收指代窗体的关键字this。然后我们不在回调函数中用this(因为那个this指代的是回调函数本身)我们用that来指代窗体,然后用that.setData()就好了撒
具体代码如下:
let that=this
sucess: function(res){
that.setData({
test:'HelloWorld!'
})
}
这回就好了
我们来测验下大家有没有理解this关键字
下面一个例子:
大家看下错在哪里了:
showMessage: function(){
console.log('What\'s wrong with me?')
}
onload: function(opitions){
wx.showToast({
title:'我怎么报错了?'
sucess: res=>{
this.showMessage()
}
})
}
error: showMessage() is undefined
修改办法:
showMessage: function(){
console.log('What\'s wrong with me?')
}
onload: function(opitions){
let that=this
wx.showToast({
title:'我怎么报错了?'
sucess: res=>{
that.showMessage()
}
})
}