1

Я использую ионный 2 и имею класс, подобный следующему. Я использую плагин locationServices и не хочу использовать ионный родной плагин геолокации.Значение элементов данных, не изменяющихся внутри машинописного текста

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); 
    } 
} 

Изменения, изменяемые внутри плагинаServices, не отражаются внутри переменных класса.

Вывод show_values() функции

истинной
ложной

+0

Невеста и может быть несвязанной, но для API карт google вам необходимо запустить некоторые обратные вызовы внутри zone.js явно. Что делать, если вы попытаетесь ввести «private __zone: NgZone» (NgZone живет в угловом/ядре) в конструкторе, а затем выполните: 'this._zone.run (() => { selfb.location_acquiring = false; selfb. location_available = true; }); ' –

ответ

0

Во-первых, вам не нужно к let self = this; техники больше, просто использовать лямбда-синтаксис машинопись в () => {} вместо анонимной функции для того, чтобы получить доступ к 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); 
    } 
} 

Надеется, что это помогает.

Смежные вопросы