我有一个我要订阅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 }}
。
作为一点搜索,我怀疑在应用恢复后,许多代码不再存在于角度区域或类似的地方,因为在lat
和long
中设置区域明确可以再次工作
this.zone.run(() => {
this.lat = location.coords.latitude;
this.long = location.coords.longitude;
});
问题是,这是我正在使用的应用程序的非常简化的版本-该应用程序具有大量的订阅和间接访问,因此我无法找到我必须放在角度区域内的代码手动。
应用恢复后,是否可以像正常应用启动后一样在角区域内运行应用代码?
编辑
将代码放入platform.resume
也不起作用。