我正在使用 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);
}
}
希望对您有所帮助。