У меня есть компонент, в котором я подписываюсь на Observable.В обратном вызове я установил переменные-члены в этом компоненте.Значения этих переменных затем будут отображаться на странице компонента.
Но когда приложение выходит из области видимости (например, вручную или из-за всплывающего окна ОС Android с запросом разрешения местоположения) и возвращается впредставление больше не обновляется (хотя обратный вызов по-прежнему получает новые значения, как показывает журнал консоли).
Рабочий пример: пустое стартовое приложение со следующим содержимым класса домашней страницы (требуется подключаемый модуль геолокации 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;
});
Дело в том, что этоочень упрощенная версия приложения, над которым я работаю, - в котором много подписок и косвенных ссылок, поэтому я не смогind код, который я должен поместить в угловую зону вручную.
Есть ли способ запустить код приложения в угловой зоне после его возобновления, как после обычного запуска приложения?
РЕДАКТИРОВАТЬ
Вставка кода в platform.resume
также не будет работать.