Мое приложение управляет некоторыми устройствами, идентифицированными по их идентификатору.
Приложение содержит вкладку с двумя вкладками: влево и вправо.Я в основном следовал шаблону иона.И левый, и правый должны знать идентификатор.
Когда я нажимаю на кнопку, система маршрутизации приводит меня к / tab-page /: ID.Тогда вкладка по умолчанию - Левая.На вкладке читается идентификатор из
this.activatedRoute.snapshot.paramMap.get('ID'); (in ionViewWillEnter).
Я хочу передать идентификатор влево и вправо.
Мой первый подход был следующим:
- вкладка записывает идентификатор в глобальную переменную
- Слева читается идентификатор из глобальной переменной в ionViewDidEnter
Проблема: иногда, Левый вводится до того, как вкладка прочитает параметры, поэтому он считывает старое значение из Глобального.
Второй подход:
- вкладка опубликовала событие после прочтения идентификатора: this.events.publish ('new_ID', id);
- Слева подписывается на событие, чтобы получить идентификатор
ngOnInit(){
this.events.subscribe('new_id6_index', (data)=>{ console.log(...); });
}
Проблемы: иногда событие публикуется один раз, но читается дважды слева, как если бы левый был создан дважды.Эти два экземпляра Left блокируют друг друга.В app.routing.module preloadingStrategy (PreloadAllModules или default) не влияет.
Третий подход
- такой же, как второй, но я добавляютаймер до публикации события.Предполагается, что это означает, что Left открылся.
setTimeout(() => {this.events.publish('new_id6_index', aa);},200);
Он не совсем чистый, но работает.
Вопрос: каков наилучший метод в этой области??
Спасибо!