Это работа для меня.

ько недавно начал погружаться в Angular 4, начиная с Angular 1.5. Я работаю с пользовательскими маршрутами и перетаскиваю данные API из службы в пользовательский компонент.

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

Есть ли способ вызывать функцию ngOnInit при каждом новом запросе маршрута?

Мой класс компонента пользователя:

// url structure: /user/:id
export class UserComponent implements OnInit {

    constructor(private route: ActivatedRoute) {}

    ngOnInit() {

      // doesn't log new id on route change
      let id = this.route.snapshot.params['id'];
      console.log(id);

      this.route.params
        .switchMap(params => this.userService.getUser(params['id']))
        .subscribe(user => {
          // logs new id on route change
          let id = this.route.snapshot.params['id'];
          console.log(id);

          this.user = user
        });
    }
}

ОБНОВИТЬ:

Нашел решение, которое, я думаю, лучше всего подходит для моего сценария. Судя по нескольким ответам и комментариям на мой вопрос и дальнейшему расследованию, подписка на маршрут, кажется, является лучшим способом. Вот мой обновленный компонент:

export class UserComponent {

  user;
  id;

  constructor(
    private userService: UserService,
    private route: ActivatedRoute
  ) {}


  ngOnInit() {
    this.route.params
      .subscribe(params => this.handleRouteChange(params));
  }

  handleRouteChange(params) {
    this.id = params['id'];

    switch (this.id) {
      case '1':
        console.log('User 1');
        break;

       case '2':
        console.log('User 2');
        break;

       case '3':
        console.log('User 3');
        break;
    }

    this.userService.getUser(this.id).
      subscribe(user => this.user = user);
  }

}

Ответы на вопрос(3)

Ваш ответ на вопрос