在打字稿中未更改的数据成员的值



我正在使用 ionic 2 并且有一个如下所示的类。 我正在使用位置服务插件,不想使用离子原生地理位置插件。

export class a{
   location_acquiring:boolean;   
   location_available:boolean;
   constructor(){
        this.location_acquiring=true;
        this.location_available=false;
   }            
   fun(){
        //Here i am using some cordova plugins and setting the location latitude and longitude localstorage variables.
        let self=this;
        cordova.plugins.diagnostic.isLocationEnabled(function(enabled){                                    
            let selfa=self;
            cordova.plugins.diagnostic.isLocationAvailable(function(available){
                let selfb=selfa;
                cordova.plugins.locationServices.geolocation.watchPosition(function(position) {
                    //Now here although project is build without errors. but the values of the variables are not updated.
                    selfb.location_acquiring=false;
                    selfb.location_available=true;
                },function(error){});
            },function(error){});
        },function(error){});
    }
   show_values(){
        console.log(this.location_acquiring);
        console.log(this.location_available);
    }
}

位置服务插件内的变量更改不会反映在类变量中。

show_values()函数的输出


首先,你不再需要let self = this;技术,只需使用 TypeScript 的 lambda 语法() => {}而不是匿名函数,以便访问 lambda 深处的this(类"a"的实例(。

然后,确保您正在检查 Cordova 插件调用中是否发生了错误(例如,通过将错误输出到调试控制台(,以及为什么您的成功回调代码从未被执行。

尝试使用以下代码:

export class a{
  location_acquiring: boolean = true;
  location_available: boolean = false;
  fun(){
    //Here i am using some cordova plugins and setting the location latitude and longitude localstorage variables.
    cordova.plugins.diagnostic.isLocationEnabled((enabled) => {
        cordova.plugins.diagnostic.isLocationAvailable((available) => {
            cordova.plugins.locationServices.geolocation.watchPosition(function(position) {
                //Now here although project is build without errors. but the values of the variables are not updated.
                this.location_acquiring=false;
                this.location_available=true;
            }, function(error){
              console.error('[watchPosition]', error);
            });
        }, (error) => {
          console.error('[isLocationAvailable]', error);
        });
    }, (error) => {
      console.error('[isLocationEnabled]', error);
    });
  }
  show_values(){
    console.log(this.location_acquiring);
    console.log(this.location_available);
  }
}

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新