微信小程序:回调函数中的this

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()
      } 
    })
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值