Binding 具有Angular2数据绑定的NativeScript不适用于地理位置

Binding 具有Angular2数据绑定的NativeScript不适用于地理位置,binding,angular,geolocation,nativescript,Binding,Angular,Geolocation,Nativescript,我正在开发一个简单的POC来显示当前位置。 程序从geolocation.watchLocation接收信息,但在我按下停止监视按钮之前,位置不会绑定并显示在屏幕上。需要注意的是,日志正确显示了坐标 JS: Start Monitoring ... JS: Location: 49.6411839:6.0040451 JS: Stop Monitoring ... 从“@angular/core”导入{Component}; 从“@angular/Router”导入{Router}”; 导入

我正在开发一个简单的POC来显示当前位置。 程序从geolocation.watchLocation接收信息,但在我按下停止监视按钮之前,位置不会绑定并显示在屏幕上。需要注意的是,日志正确显示了坐标

JS: Start Monitoring ...
JS: Location: 49.6411839:6.0040451
JS: Stop Monitoring ...

从“@angular/core”导入{Component};
从“@angular/Router”导入{Router}”;
导入地理位置=需要(“nativescript地理位置”);
@组成部分({
选择器:“TrackingPageSelector”,
模板:`
`
})
导出类TrackingPageComponent{
纬度:数字=0;
经度:数字=0;
watchId:number=0;
构造函数(专用路由器:路由器){}
恩戈尼尼特(){
如果(!geolocation.isEnabled())geolocation.enableLocationRequest();
}
公共按钮启动停止按钮(){
如果(this.watchId!=0){
log('停止监视…');
geolocation.clearWatch(this.watchId);
this.watchId=0;
}否则{
log('Start Monitoring…');
让_self=这个;
this.watchId=geolocation.watchLocation(
功能(loc){
国际单项体育联合会(loc){
_自纬度=位置纬度;
_自经度=位置经度;
log(`Location:${u self.latitude}:${u self.longitude}`);
}
},
职能(e){
this.errorMsg=e.message;
},
{desiredAccuracy:3,UpdateInstance:10,minimumUpdateTime:1000*3});//应每X秒更新一次
}
}
}
如果您使用
()=>
而不是
函数()
,那么您就不需要
\u self
黑客。 看起来您需要手动调用更改检测。NgZone似乎不包括地理位置。watchLocation()

或者
zone.run(()=>…)
like

 constructor(private zone:NgZone) {}

 ...

        this.watchId = geolocation.watchLocation(
            (loc) => {
                if (loc) {
                  this.zone.run(() => {
                    this.latitude = loc.latitude;
                    this.longitude = loc.longitude;

                    console.log(`Location: ${this.latitude}:${this.longitude}`);
                   });
                }
            },
            (e) => {
                this.errorMsg = e.message;
            },

如果只更改本地字段
cdRef.detectChanges()
是更好的选择,如果调用可能在当前组件之外修改某些状态的方法,
zone.run(…)
是更好的选择。

提供的解决方案确实有效!我实施了detectChanges提案。谢谢你的帮助!如果这回答了您的问题,请您使用上下投票按钮下方的白色复选标记接受我的答案,将问题标记为已回答,以表明问题已解决?谢谢
 constructor(private cdRef:ChangeDetectorRef) {}

 ...

        this.watchId = geolocation.watchLocation(
            (loc) => {
                if (loc) {
                    this.latitude = loc.latitude;
                    this.longitude = loc.longitude;
                    this.cdRef.detectChanges();
                    console.log(`Location: ${this.latitude}:${this.longitude}`);
                }
            },
            (e) => {
                this.errorMsg = e.message;
            },
 constructor(private zone:NgZone) {}

 ...

        this.watchId = geolocation.watchLocation(
            (loc) => {
                if (loc) {
                  this.zone.run(() => {
                    this.latitude = loc.latitude;
                    this.longitude = loc.longitude;

                    console.log(`Location: ${this.latitude}:${this.longitude}`);
                   });
                }
            },
            (e) => {
                this.errorMsg = e.message;
            },