【问题标题】:Angular2 - Component variable value set on callback function not updated in templateAngular2 - 在回调函数上设置的组件变量值未在模板中更新
【发布时间】:2017-05-05 05:57:54
【问题描述】:

用户案例:当应用程序在网络浏览器中打开时,用户可以通过“允许”和“拒绝”选项更改“了解您的位置”。

我有以下代码示例。

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 但没有成功

谁能帮忙

【问题讨论】:

  • 不使用 ngZone 对我有用
  • 有趣。我认为geolocation 是需要区域的示例之一。他们是否在 zone.js 中修复了它(没有遵循开发)?

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


【解决方案1】:

地理定位 API 未包含在 Angulars 区域中。 使回调在 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;
      });
    });
  }
}

【讨论】:

  • 嗨,我尝试了完全相同的代码,但它对我不起作用:(
  • 正如 yurzui 解释的那样,它甚至没有必要。请创建一个允许重现问题的 plunker。
猜你喜欢
  • 2017-05-03
  • 2018-06-09
  • 2017-08-11
  • 2023-03-17
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多