应用暂停/恢复后视图未更新

时间:2019-04-09 13:06:06

标签: javascript angular typescript ionic-framework ionic4

我有一个我要订阅Observable的组件。在回调中,我在该组件中设置成员变量。这些变量的值将显示在组件页面上。

但是,当应用超出范围(例如,通过手动操作或通过Android OS-Popup要求位置许可)并返回时,视图不再更新(尽管回调仍会收到新值)控制台日志证明)。

一个工作示例将是一个空白的入门应用程序,该应用程序具有首页类的以下内容(需要cordova地理位置插件)

export class HomePage implements OnInit {

  lat = 0;
  long = 0;

  private subscription: Subscription;

  constructor(private geolocation: Geolocation,
              private zone: NgZone)
  {
  }

  ngOnInit()
  {
    console.log('constructor() Subscribing');
    this.renewSubscription();
  }

  renewSubscription()
  {
    if(this.subscription)
    {
      this.subscription.unsubscribe();
      this.subscription = null;
    }

    this.subscription = this.geolocation
                            .watchPosition({ enableHighAccuracy : true})
                            .subscribe(this.onLocationChange);
  }

  private onLocationChange = (location: Geoposition) =>
  {
    if(location.coords)
    {
      console.log(location.coords.latitude + ':' + location.coords.longitude);

        this.lat  = location.coords.latitude;
        this.long = location.coords.longitude;

    }
    else
    {
      console.dir('no coordinates');
      console.dir(location);
    }
  }

}

和以下内容代替主页html内容

{{ lat }}:{{ long }}

作为一点搜索,我怀疑在应用恢复后,许多代码不再存在于角度区域或类似的地方,因为在latlong中设置区域明确可以再次工作

this.zone.run(() => {

        this.lat  = location.coords.latitude;
        this.long = location.coords.longitude;
      });

问题是,这是我正在使用的应用程序的非常简化的版本-该应用程序具有大量的订阅和间接访问,因此我无法找到我必须放在角度区域内的代码手动。

应用恢复后,是否可以像正常应用启动后一样在角区域内运行应用代码?

编辑

将代码放入platform.resume也不起作用。

0 个答案:

没有答案