我有三个组件,每个都有自己的解析器,可以从不同的API获取数据。 为此,这些组件依赖于使用服务在它们之间共享的url。Angular2:如何刷新解析程序相关组件?
我希望当这个URL发生变化时,每个组件都会重新加载自己,即重新启动解析器。
我看了一下几个相关的SO问题,但没有提及如何做到这一点使用的解析器,CF时:question 1,question 2,question 3
我能想到的方法有两种:
肮脏的方式:使用路由器重定向和空白组件强制刷新组件。
this.router.navigateByUrl('blank',true);
this.router.navigateByUrl('home/(mapps:mobil//sw:simil//sf:sales)');
但这并没有奏效。刷新了,但解析器没有解决。
另一种方式:使用BehaviorSubject或ChangeDetectorRef。 但是后来,我对如何实现它一无所知,考虑到检测组件内的更改并不会帮助我实际重新启动解析器。
我的感觉是,这必须通过路由器莫名其妙做,因为它是一个寂寂解析器:
const routes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: 'home',
component: HomeComponent,
children : [
{
path: '',
component: BlankComponent
},
{
path: 'simil',
component: SwComponent,
outlet: 'sw',
resolve: {
data: SwResolve
}
},
{
path: 'sales',
component: SalesComponent,
outlet: 'sf',
resolve: {
data: SalesResolve
}
}
]
},
{
path: 'blank',
component: BlankComponent
}
];
如何实现这个任何提示?
编辑:这里是related plunkr
编辑6月17日: 没有必要对坯料的解决方法了。 要刷新组件,只需调用回路线:
this.router.navigateByUrl('home/(mapps:mobil//sw:simil//sf:sales)')
请,你如何使用解析器提供的细节和[MCVE(http://stackoverflow.com/help/mcve)。当一个路由被注入为'ActivatedRoute'(而不是'ActivatedRouteSnapshot')时,'data'可以被订阅,就像它在[这里]显示的那样(https://angular.io/docs/ts/latest/guide/router.html #!#获取数据前方的导航)。 – estus
@estus增加了详细的plunkr。 Link演示了我已经使用的ActivatedRouteSnapshot的用法。 – Stanislasdrg
好吧,我明白了。在这个庞然大物中应该发生一个应该刷新解析器的重定向? – estus