Это работа для меня.
ько недавно начал погружаться в 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);
}
}