数据变量未从VueJS中的方法更新

时间:2017-02-02 06:10:20

标签: javascript vuejs2 vue-component vue.js

我正在使用以下代码从HTML5地理位置API获取访问者邮政编码(密码)。但是,我想获取该邮政编码并将其更新为数据变量'pincode'。下面是我使用的代码,值在控制台中正确打印。但是没有更新'pincode'变量。

export default {
    data(){
        return {
      pincode: 0,
        }
    },
    methods: {
    findPincode(){
      navigator.geolocation.getCurrentPosition(function (position) {
                var geocoder = new google.maps.Geocoder();
                var latLng   = new google.maps.LatLng(
                    position.coords.latitude, position.coords.longitude);
                geocoder.geocode({
                    'latLng': latLng
                }, function (results, status) {
                    for (var i = 0; i < results[0].address_components.length; i++) {
                        var address = results[0].address_components[i];
                        if (address.types[0] == "postal_code") {
                            console.log(address.long_name) // prints 680001
                            this.pincode = Number(address.long_name) // not working
                        }
                    }
                });
            });
        }    
    }
}

2 个答案:

答案 0 :(得分:9)

这是因为您在this函数

中丢失了geocoder.geocode的上下文
let self = this
geocoder.geocode({
   'latLng': latLng
}, function (results, status) {
    for (var i = 0; i < results[0].address_components.length; i++) {
       var address = results[0].address_components[i];
       if (address.types[0] == "postal_code") {
          console.log(address.long_name) // prints 680001
          self.pincode = Number(address.long_name) // not working
       }
   }
});

这应该有用。

答案 1 :(得分:5)

您可以使用arrow function,而不是使用if($response->getStatusCode() == 401){ dd('you are not authorized'); } if($response->getStatusCode() == 200){ dd('you are authorized'); //Store user credentials on cache CacheStore::storeUserCredentials(json_decode((string) $response->getBody(), true)); } 语法,而{@ 3}}不会绑定它自己的thisargumentssuper,或new.target。,如下:

function()