Angular2: метод вызова/ngoninit при изменении параметра маршрута

Прямо сейчас я делаю что-то вроде интернет-магазина, и на моей домашней странице у меня есть раскрывающийся список категорий. Допустим, родительский кот A и подкатегории B и C.

Категории A, B и C представлены одним компонентом CatAComponent. Когда я впервые захожу в одну из этих кошек, вызывается мой ngoninit, и на страницах отображается то, что ему нужно отображать.

Когда я хочу щелкнуть другой подкат, я все еще нахожусь в том же компоненте, но изменяется только параметр маршрута (например, я был на локальном хосте: 123/CatA/CatB, теперь я на локальном хосте: 123/CatA /CatC, изменился только параметр, поэтому ngOnInit не вызывается, и мой метод обновления также не вызывается).

Любой способ обойти это? Я не могу поместить метод (щелкнуть) в свой файл представления, чтобы сослаться на метод, меню для категорий находится в другом компоненте представления.

Могу ли я вызвать NgOnInit, когда изменился только параметр?


person TanguyB    schedule 23.12.2016    source источник


Ответы (1)


Вы должны подписаться на услугу ActivatedRoute следующим образом:

//Составная часть

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params }   from '@angular/router';

export class YourComponent {
  constructor(
    private route: ActivatedRoute      
  ) {}

  ngOnInit(): void {
    this.route.params.subscribe((params: Params) => {
      console.log(params); 
      // this will be called every time route changes
      // so you can perform your functionality here

    });
  }
}
person ranakrunal9    schedule 23.12.2016
comment
Я глупый. Я подписался на параметры, поместил свой метод обновления вне его, а не внутри него. спасибо сработало отлично - person TanguyB; 23.12.2016
comment
Этот ответ касается параметров, а не всего маршрута. Для маршрутов перейдите сюда stackoverflow.com/questions/42453375/ - person dasfdsa; 18.08.2017
comment
Вы также должны сохранить подписку в переменной экземпляра и отменить подписку в методе ngOnDestroy. - person AlanObject; 22.08.2018