收藏
回答

wx.getLocation获取的数据怎么同步到data的数据上?

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 需求 wx.getLocation 工具 v1.02 v1.02

获取位置信息的代码是这样的:

wx.getLocation({

    success: res => {

        var latitude = res.latitude;

        var longitude = res.longitude;

        this.setData({

            latitude:latitude,

            longitude:longitude

        })

    },

})

data中的代码是这样的:

data: {

    srcHeight:'',

    location:'',

    latitude:'',

    longitude:''

},

获取屏幕高度的数据可以传到data中,但是获取位置信息的数据就无法传到data中,都是使用this.setData,有没有大佬能教一下?


最后一次编辑于  2018-09-25  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

37 个回答

  • 卢霄霄
    卢霄霄
    2018-09-25

    是报 setData of undefined 什么什么的吗?

    2018-09-25
    赞同
    回复 22
    • paranoid
      paranoid
      2018-09-25

      我这么写没有报错,只是数据没有传到data中

      2018-09-25
      赞同
      回复
    • 卢霄霄
      卢霄霄
      2018-09-25回复paranoid

      你在 success里console.log过吗?确认进去了的?

      2018-09-25
      赞同
      回复
    • paranoid
      paranoid
      2018-09-25

      success里面能console.log输出的

      2018-09-25
      赞同
      回复
    • 卢霄霄
      卢霄霄
      2018-09-25回复paranoid

      你console.log(this)看看是啥呢?展开它,截个图

      2018-09-25
      赞同
      回复
    • paranoid
      paranoid
      2018-09-25


      这样的

      2018-09-25
      赞同
      回复
    查看更多(17)
  • paranoid
    paranoid
    2018-09-25

    之前有一个写法是报setData of undefined这个的错的

    2018-09-25
    赞同
    回复
  • 想不到了
    想不到了
    2018-09-25

    在外面吧 this 重新定义哈

    如 let that = this;

    2018-09-25
    赞同
    回复 5
    • paranoid
      paranoid
      2018-09-25

      还是不行。。。数据还是没有传到data中

      2018-09-25
      赞同
      回复
    • 想不到了
      想不到了
      2018-09-25

      success  里面打出日志

      2018-09-25
      赞同
      回复
    • paranoid
      paranoid
      2018-09-25

      这个是success里面console.log(this)的结果

      2018-09-25
      赞同
      回复
    • 想不到了
      想不到了
      2018-09-25

      1 确定data里有定义

      latitude

      longitude


      2 在success 里

      console.log(res)

      console.log("latitude1="+that.data.latitude

      var latitude = res.latitude; var longitude = res.longitude;

      that.setData({

                  latitude:latitude,

                  longitude:longitude

              })


      console.log("latitude2="+that.data.latitude



      你就可以看到数据赋值没有了


      2018-09-25
      赞同
      回复
    • paranoid
      paranoid
      2018-09-25

      在success里面console.log输出是有数据的,但是到了wx.getLocation函数外面再console.log()data里面的latitude就没有数据了


      2018-09-25
      赞同
      回复
  • 晓阳丶
    晓阳丶
    2018-09-25

    朋友,我猜测你绝对是getLocation的success还没走完你就console.log   this里面的内容了,这是一个异步的方法哦,你要等success走完再打印才会有

    2018-09-25
    赞同
    回复 3
    • paranoid
      paranoid
      2018-09-25

      主要就是没怎么搞明白异步,在wx.getLocation里面console.log是有的,在wx.getLocation外面console.log数据就不对了,但是在wxml中引用数据还是有的,我主要就是为了wxml中引用数据,现在用是能用了,就是还是不怎么明白异步,有点懵。。。

      2018-09-25
      赞同
      回复
    • 晓阳丶
      晓阳丶
      2018-09-25

      异步的含义你百度下比较靠谱,我也只是意会,言传的话我怕说不清,还有一定你也要注意一下,this.setData这个方法也是异步的

      2018-09-25
      赞同
      回复
    • paranoid
      paranoid
      2018-09-25回复晓阳丶

      嗯嗯好的,谢谢啦

      2018-09-25
      赞同
      回复
  • 不喝饮料不瘦十斤
    不喝饮料不瘦十斤
    2018-09-27

    在第二行添加 var self = this  把this.setData改为self.setData  这样代码没毛病 你外面要打印数据前提是wx.getLocation得走完success后


    2018-09-27
    赞同
    回复 2
    • paranoid
      paranoid
      2018-09-27

      这个好像还是异步请求的问题,后来这样写success中的数据还是传过去的,在wxml页面也是有显示的,我查了一下异步的定义,好像是在外面打印数据的时候,在异步请求的同时继续往下执行函数,所以打印出来的值没有赋值上去,但是值其实是已经传过去的,在success里面打印的值就是已经赋上的值。我的理解是这样的,不知道对不对

      2018-09-27
      赞同
      回复
    • 不喝饮料不瘦十斤
      不喝饮料不瘦十斤
      2018-09-27

      对 success是异步函数 和最外面打印的this.setData() 一块执行   当success里面没执行完时,外面就打印undefined

      2018-09-27
      赞同
      回复