【发布时间】:2017-10-04 00:38:37
【问题描述】:
我最近才开始从 Angular 1.5 开始深入研究 Angular 4。我正在使用用户路由并将 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
});
}
}
更新:
找到了一个我认为最适合我的方案的解决方案。根据我的问题和进一步调查的几个答案和 cmets,订阅路线似乎是要走的路。这是我更新的组件:
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);
}
}
【问题讨论】:
-
我在这里有一个示例应用程序,它显示了几种不同类型的路由,如果有帮助的话:github.com/DeborahK/Angular-Routing
-
@DeborahK,感谢您的链接。看起来像一个非常可靠的入门应用程序,绝对是一些很好的编码标准示例。
-
谢谢@Rob,如果您对这类事情感兴趣,我有一个课程可以配合:app.pluralsight.com/library/courses/angular-routing/…
标签: angular angular2-routing angular2-components