[英]angular route resolver or onInit?
使用resolver
服务或在 OnInit 钩子中获取数据有什么更好的? 例如,如果我需要从 3 个不同来源获取数据到 1 页更好的用户解析器或将代码写入 ngOnInit?
代码
ngOnInit() {
service1.getData().subscribe(c => {
this.data1 = c;
});
service2.getData().subscribe(c => {
this.data2 = c;
});
service3.getData().subscribe(c => {
this.data3 = c;
});
}
或
RouterModule.forRoot([{
path: 'page/:id',
component: blabla,
resolve: {
data1: service1,
data2: service2,
data3: service3
}
}])
ngOnInit() {
this.data1 = this.activatedRoute.snapshot.data.data1;
this.data2 = this.activatedRoute.snapshot.data.data2;
this.data3 = this.activatedRoute.snapshot.data.data3;
}
resolvers
和onInit
之间的主要区别是同步性。
Resolver
是同步的。
OnInit
是异步的(在您的代码中)。
看看这个网站: https : //blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html
嗯,这取决于。 如果组件在没有data1
、 data2
和data3
情况下无法运行,那么解析方法就很有意义。 一个例子是你的银行账户页面。 在您可以看到您帐户的详细信息之前,您并不真正关心该页面。
如果您可以在用户等待数据时向他显示某些内容,最好在ngOnInit
获取数据。 一个例子是产品页面,其中data{1,2,3}
是推荐产品的流。 即使没有推荐,产品页面仍然可以显示,并且推荐的产品可以继续加载,而用户可以与页面的其余部分进行交互。
如果不深入了解您的业务逻辑需求,任何人都很难回答这个问题。
重要的是要了解route resolvers
和component ngOnInit
是针对两个不同问题的两种不同解决方案,这意味着一个工具并不比另一个更好。
我会说最好的做法是在您的应用程序中使用两者,具体取决于情况 - 有时在用户体验方面同步显示视图(在加载数据之前阻塞)是有意义的,而其他时候最好立即显示视图并异步加载数据。
因此,这不是应用程序设计或架构决策——而是 UX/UI 决策。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.