Возможно ли дублирование компонента Angular? - PullRequest
0 голосов
/ 27 апреля 2020

Я столкнулся с необъяснимым поведением компонента / страницы Ioni c Angular. Компонент используется как страница с боковой навигацией. Контекст более сложный, есть Google Map и другие сервисы, и проблема появляется после определенной последовательности действий (войти на страницу, выйти из страницы, войти в страницу, выполнить некоторые действия, выйти из страницы, войти в страницу -> дублированный вид?).

Я хотел бы узнать, как это возможно, что обратный вызов таймера возвращает текущий идентификатор (правильный), в то время как обратный вызов подписки возвращает текущий идентификатор И один из предыдущих Идентификаторы , как мне кажется, ошеломляют, поскольку нет никакой возможности, что подписчик может быть даже дважды инициализирован в одном и том же экземпляре (проверка нуля), и они отписываются в ngOnDestroy ().

ngOnInit(){
    // get a new id from the service
    this.viewId = this.idService.getViewId();
    this.check();
    this.watch();
}

check() {
    console.log("init check");
    if (!this.timerCheck) {
      let timer1 = timer(0, 1000);
      this.timerCheck = timer1.subscribe(() => {
        // here everything looks normal on each page entry
        // only the current viewId is shown
        console.log("view id check: ", this.viewId, new Date().getTime());
      });
    }
}

watch(){
   if (!this.locationSub) {
      // the service returns a BehaviorSubject
      this.locationSub = this.locationMonitor.getLocationObservable().subscribe((data) => {
        if (data !== null) {
          // here it happens that the previous viewId is shown 
          // even if the previous component instance has been destroyed (hopefully?)
          console.log("view id watch: ", this.viewId, new Date().getTime());
        }
      });
    }
}

ngOnDestroy(){
    this.locationSub.unsubscribe();
    this.timerCheck.unsubscribe();
}

[Update 1] Если я показываю viewId в html, он показывает правильный идентификатор, но когда, например, я нажимаю кнопку и вызываю функцию в компоненте, контекст неверен (this указывает на предыдущий пример). Независимо от того, что может быть причиной этой ошибки, я нахожу, что это вызывает некоторые странные фундаментальные проблемы с Angular, такие как: как предыдущий экземпляр страницы может стать "зомби ie" и каким-то образом (кажется) "восстановленным из сборщика мусора "и слежка за текущим экземпляром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...