Angular2 - 回调函数上设置的组件变量值未在模板中更新

时间:2017-05-05 05:57:55

标签: angular angular2-template angular2-components google-geolocation

用户案例:在Web浏览器中打开应用程序后,用户可以更改 - "了解您的位置"选项"允许"和"拒绝"。

我有以下代码示例。

ngOnInit() {
  if ("geolocation" in navigator) {
    navigator.geolocation.getCurrentPosition((position) => {
      this.latitude = position.coords.latitude;
      this.longitude = position.coords.longitude;
      this.zoom = 18;
    });
  }
}

这可行,因为我可以看到console.log,如果允许,纬度和经度的最终值是当前位置,否则它是我硬编码的默认值。

现在我的问题是,当打印{{latitude}}{{longitude}}

时,无法在模板中看到此更新的当前位置更改

我尝试过使用ngZoneChangeDetectorRef,但没有成功

任何人都可以提供帮助

1 个答案:

答案 0 :(得分:2)

Angulars区域不包含地理位置API。 使回调在Angulars区域内显式运行,并运行Angular变化检测并确保视图更新:

constructor(private zone:NgZone) {}

ngOnInit() {
  if ("geolocation" in navigator) {                
    navigator.geolocation.getCurrentPosition((position) => {
      this.zone.run(() => {
        this.latitude = position.coords.latitude;
        this.longitude = position.coords.longitude;
        this.zoom = 18;
      });
    });
  }
}