Angular это надо отписаться от этой подписки .acactiveRoute - PullRequest
0 голосов
/ 24 августа 2018

Мой код:

ngOnInit() {

  this.activatedRoute.params.subscribe((params: Params) => {
    // do stuff
  })

  this.activatedRoute.data.subscribe((data: any) => {
    // do stuff
  })

}

У меня вопрос ... нужно ли мне отписаться от них в ngOnDestroy?

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

спасибо

Ответы [ 4 ]

0 голосов
/ 24 августа 2018

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

Примерно так

  ngOnInit() {
    this.subscriptions.push(
      this.activatedRoute.params.subscribe((params: Params) => {
        // do stuff
      }));

    this.subscriptions.push(
      this.activatedRoute.data.subscribe((data: any) => {
        // do stuff
      }));
  }

  ngOnDestroy() {
    this.subscriptions.forEach((subscription: Subscription) => {
      subscription.unsubscribe();
    });
  }

Пожалуйста, посмотрите пример здесь: https://stackblitz.com/edit/angular-unsubscribing-then-all?file=src/app/app.component.ts

0 голосов
/ 24 августа 2018

Обычно, когда ваш компонент уничтожается, все подписанные наблюдаемые автоматически отписываются, за небольшим исключением. Но activRoute не является одним из них. Когда маршрутизатор выйдет из маршрутизируемого компонента, он уничтожит компонент вместе с введенным activatedRoute

0 голосов
/ 24 августа 2018

Нет, вам не нужно отписываться от наблюдаемых маршрутов

От Документация

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

Существует несколько исключительных наблюдаемых, в которых это не является необходимым.Наблюдаемые ActivatedRoute относятся к числу исключений.

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

Не стесняйтесь отписаться в любом случае.Это безвредно и никогда не бывает плохой практикой.

0 голосов
/ 24 августа 2018

Для активированных маршрутов наблюдаемое является исключением, потому что The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.

Источник: Угловой документ

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