找回密码
 立即注册

QQ登录

只需一步,快速开始

微信小程序开发资源

关注:1414

所属分类: 微信开发 微信小程序开发资源

本版块为微信小程序资源分享版块,包括微信小程序开发中可能会用到的各类小程序开发工具、小程序demo及开发教程等。

快捷导航www.henkuai.com):微信小程序开发者社区微信小程序开发问答微信小程序开发交流群

[最新文章] 微信小程序 this和that详解及简单实例

[复制链接]
查看: 964|回复: 3
最佳答案
0 

3

主题

3

帖子

65

积分

新人求带

积分
65
 楼主| 发表于 2017-2-17 18:06:13 | 显示全部楼层 |阅读模式
微信小程序中,在wx.request({});方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报undefiend。原因是,在javascript中,this代表着当前对象,会随着程序的执行过程中的上下文改变,在wx.request({});方法的回调函数中,对象已经发生改变,所以已经不是wx.request({});方法对象了,data属性也不存在了。官方的解决办法是,复制一份当前的对象,如下:
  1. var that=this;//把this对象复制到临时变量that
复制代码

在success回调函数中使用that.data就能获取到数据了。
不过,还有另外一种方式,也很特别,是将success回调函数换一种声明方式,如下:
  1. success: res =>{
  2.   this.setData({
  3.       loadingHidden: true,
  4.       hideCommitSuccessToast: false
  5.   })
  6. }
复制代码

在这种方式下,this可以直接使用,完全可以获取到data数据。

再给一个完整的例子:
  1. success: res => {
  2.   if (res.data.code != 0) {
  3.    // 提交失败
  4.    this.setData({
  5.     loadingHidden: true,
  6.     hiddenTips: false,
  7.     tipsContent: res.data.message
  8.    })
  9.   } else {
  10.    // 提交成功
  11.    this.setData({
  12.     loadingHidden: true,
  13.     hideCommitSuccessToast: false
  14.    })
  15.    subBtn = false;

  16.    // 定时,3秒消失
  17.    setTimeout(() => {
  18.     this.setData({
  19.      hideCommitSuccessToast: true
  20.     })
  21.     wx.navigateBack({ delta: 2 });
  22.    }, 2000);

  23.   }
  24. }
复制代码
回复

使用道具 举报

最佳答案
0 

0

主题

21

帖子

397

积分

略知一二

积分
397
发表于 2017-2-20 16:03:34 | 显示全部楼层
这没啥特别的把....es6的箭头函数特性....
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

8

帖子

190

积分

新人求带

积分
190
发表于 7 天前 | 显示全部楼层
回复

使用道具 举报

最佳答案
0 

0

主题

10

帖子

84

积分

新人求带

积分
84
发表于 4 天前 | 显示全部楼层
学习了,谢谢。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


易域网-您身边的域名管家

henkuai.com是专业的第三方微信开发者平台,为生态而生。


本站为第三方微信开发者平台,非腾讯官方网站。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

欢迎来这里一起喝喝茶,
聊聊你的产品。

微信公众号gongzhongkaifa

工作日12小时内回复。

网站业务
zhongcong@henkuai.com

工作日12小时内回复。

市场合作
songchang@henkuai.com