Как восстановить / уничтожить компонент в Angular-6 - PullRequest
0 голосов
/ 19 декабря 2018
  1. Можете ли вы проверить наличие экземпляра компонента из самого компонента?

  2. Можно ли уничтожить существующий экземпляр и создать новый экземпляр?

У меня, похоже, проблема с одним из моих компонентов.NgAfterViewInit запускается несколько раз подряд с различными компонентами params, запускается только в первый раз (я предполагаю, когда компонент был создан). Последующие посещения не вызывают срабатывание ngAfterViewInit, т.е. выглядит так, как будто он повторно использует тот же экземпляр компонента или что-то ... однако я могу определить параметры и выполнить необходимые действия с измененными параметрами.

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

Моя цель - заново установить компонент КАЖДЫЙ РАЗ, когда я посещаю маршрут.

Итак

  1. Можете ли вы проверить существование экземпляра компонента из самого компонента?

  2. Можете ли вы уничтожить существующий экземпляр из кода и создать новый экземпляр?

Или есть другой способ решения этой проблемы.

Моя настройка

Ленивый загруженный модуль -> mdm

const routes: Routes = [

  {
    path: '',
    component: HomeComponent,

    children : [
                  { path: ':id' , component : AComponent }
    ]
  }

Меню AnchorLinks

  1. МДМ / 1000
  2. МДМ / 2000 и т. Д.

1 Ответ

0 голосов
/ 19 декабря 2018

Определенно есть другой способ сделать это.

Чтобы ответить вам, вы, вероятно, можете проверить существование экземпляра компонента и, возможно, можете создать его заново по требованию.

Но вы не должны.

Мало того, что это излишне, но вы также должны позволить Angular управлять инжекторами, иначе (если вы не знаете, что делаете), вы столкнетесь с некоторыми забавными проблемами.

Чтобы кратко объяснить вам: перезагрузка маршрута не запускает жизненный цикл компонента.Жизненный цикл компонента начинается, когда он создается, и заканчивается, когда он уничтожается (что означает «больше не в DOM»).

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

Чтобы решить эту проблему, подпишитесь на события изменения маршрута в вашем хуке жизненного цикла:

ngAfterViewInit() {
  this.router.events
    .pipe(filter(event => event instanceof NavigationEnd))
    .subscribe(event => /* do something */);
}

Я отправил наблюдаемому только прослушивание последнего события стека (в противном случае ваша подписка будетпобежал много раз).

...