微信小程序中this关键字注意事项

        微信小程序中,在wx.request({});方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报undefiend。原因是,在javascript中,this代表着当前对象,会随着程序的执行过程中的上下文改变,在wx.request({});方法的回调函数中,对象已经发生改变,所以已经不是wx.request({});方法对象了,data属性也不存在了。官方的解决办法是,复制一份当前的对象,如下:

var that=this;    //把this对象复制到临时变量that

在success回调函数中使用self.data就能获取到数据了,如下:

  /**
   * 页面的初始数据
   */
  data: {
    imageSrc: '',
  },
 
  /**
   * 图片选择事件
   */
  chooseImage: function() {
    var self = this;    // 官方的解决办法是,复制一份当前的对象
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['original', 'compressed'],   // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'],        // 可以指定来源是相册还是相机,默认二者都有
      success: function(res) {
        // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
        var tempFilePaths = res.tempFilePaths;
        console.log(res.tempFilePaths);
        self.setData({
          imageSrc: res.tempFilePaths[0],
        })
      },
    });
  },

不过,还有另外一种方式,也很特别,是将success回调函数换一种声明方式,如下:

  /**
   * 页面的初始数据
   */
  data: {
    imageSrc: '',
  },
 
  /**
   * 图片选择事件
   */
  chooseImage: function() {
    // var self = this;    // 这里不用复制
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'],      // 可以指定来源是相册还是相机,默认二者都有
      success: res => {
        // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
        var tempFilePaths = res.tempFilePaths;
        console.log(res.tempFilePaths);
        this.setData({
          imageSrc: res.tempFilePaths[0],
        })
      },
    });
  },

.wxml文件如下:

<!--index.wxml-->
<view>
  <view style='border:solid black 1px;height:200rpx;width:200rpx'>
    <image src='{{imageSrc}}' style='height:100%;width:100%' mode='aspectFill'></image>
  </view>
  <button bindtap='chooseImage' size='mini' style='border:0px;width:200rpx' type='warn' plain>选择</button>
</view>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值