角度路线解析器或onInit?

Naz*_*iuk 11 typescript angular

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;
});
}
Run Code Online (Sandbox Code Playgroud)

要么

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;
}
Run Code Online (Sandbox Code Playgroud)

Gus*_*pes 10

resolvers和之间的主要区别onInit是同步性.

  • Resolver 是同步的.

    • 在加载组件之前需要数据时,应该使用它.
    • 您阻止组件加载.
    • 您没有将服务注入组件(您不能在那里使用其他方法)
  • OnInit 是异步的(在你的代码中).

    • 在加载组件之前不需要数据时,应该使用它.
    • 您不会阻止组件加载.
    • 您将服务注入组件,因此您可以使用此服务中的其他方法.

看看这个网站:https://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html


Tom*_*ula 7

这要看情况。如果组件在没有data1, data2, 和 的情况下无法运行data3,则解析方法很有意义。一个例子是你的银行账户页面。在您可以看到您帐户的详细信息之前,您并不真正关心该页面。

如果您可以在用户等待数据时向他显示某些内容,最好将数据保存在ngOnInit. 一个例子是产品页面,其中data{1,2,3}是推荐产品流。即使没有推荐,产品页面仍然可以显示,并且推荐的产品可以继续加载,而用户可以与页面的其余部分进行交互。

如果不深入了解您的业务逻辑需求,任何人都很难回答这个问题。