Компонент не уничтожается после перезагрузки + переход на другую страницу - PullRequest
0 голосов
/ 31 января 2020

В приложении Ioni c v4 ngOnDestroy не вызывается, когда я обновляю sh страницу, а затем возвращаюсь на другую страницу, вызывая Router.navigateByUrl().

На основе этот ответ , я попытался уничтожить страницу при перезагрузке, применив @HostListener("window:beforeunload") к ngOnDestroy, но проблема, с которой я сталкиваюсь, заключается в том, что мне нужно, чтобы страница была уничтожена ПОСЛЕ ее был обновлен и затем переход на другую страницу.

Эта демонстрация показывает мою проблему, и вот шаги по ее воспроизведению:

  1. Доступ к приложению: приложение автоматически загружается на родительскую страницу, которая является первой и единственной вкладкой в ​​демо-версии
  2. Перейдите на дочернюю страницу, нажав кнопку «Перейти к дочернему элементу»: дочерняя страница откроется
  3. Перезагрузите дочернюю страницу, перейдя на бар адрес в браузере в приложении, щелкнув внутри него, а затем нажмите клавишу ввода (не используйте кнопку перезагрузки, потому что это перезагружает приложение и указывает непосредственно на родительскую страницу)
  4. Перейти к родительскую страницу, нажав кнопку «Перейти к родителю»

На последнем шаге консоль не регистрирует, что дочерняя страница уничтожена, и при повторном обращении к ней из родительской страницы не логируй ни что он инициализирован. Это означает, что дочерняя страница не уничтожена.

Обратите внимание, что в случае, когда дочерняя страница не обновляется и при нажатии кнопки «Перейти к родителю» дочерний компонент уничтожается (ngOnDestroy вызывается), а затем создается / инициализируется при следующем доступе.

1 Ответ

0 голосов
/ 31 января 2020

Каждый раз, когда компонент обновлялся после обновления маршрутизатора, я обнаруживал одну странную вещь: этот компонент не был уничтожен в Ioni c.

. Я пробовал следующий способ. После обновления дочернего компонента.

  1. Реализация OnInit и OnDestroy в родительском компоненте.
  2. Затем нажмите клавишу ввода в дочернем компоненте и затем нажмите «Перейти к родительскому компоненту»
  3. После этого я нажал на переход к дочернему компоненту. Здесь показано «Инициализированный родительский компонент и Уничтоженный родительский компонент» в этой консоли.
export class Tab1Component implements OnInit, OnDestroy {

    constructor(private router: Router) {}

    navigatToChild() {
      this.router.navigateByUrl("/tabs/tab1/child")
    }

    ngOnInit() {
      console.log("Parent component initialized")
    }

    @HostListener("window:beforeunload")
    ngOnDestroy() {
      console.log("Parent component destroyed")
    }
}
...