【发布时间】:2019-08-13 23:16:06
【问题描述】:
我正在尝试实现一个过滤器,一旦用户提交了过滤器表单,我就会将表单的内容作为查询参数传递,并且解析器会根据过滤器标准进行服务调用以获取新内容。
这就是我设置路由的方式(ReferralsPage 是一个延迟加载的组件)
//app-routing.module.ts
{
path: 'home',
resolve: {
loggedIn: AuthenticationResolver
},
children: [
{ path: '', redirectTo: 'referrals', pathMatch: 'full' },
{ path: 'referrals', loadChildren: './pages/referrals/referrals.module#ReferralsPageModule' }]
}
//referralsPageModule.ts
const routes: Routes = [
{
path: '',
component: ReferralsPage,
resolve: {
response: ReferralsResolver
},
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
}
];
而routes是在ReferralsPageModule中导入的RouterModule的forChild()方法中传入的。
这是我的ReferralsResolver 中的resolve() 函数
resolve(snapshot: ActivatedRouteSnapshot): Observable<ReferralSearchResponse> {
const criteria = this._getFilterCriteria(snapshot);
const sort = (criteria && criteria.sort) ? criteria.sort : '-lastUpdated';
return this._referralsService.getReferrals(1, 25, sort, criteria)
.pipe(tap(console.log))
}
最后,这是对我的组件中激活的路由数据的订阅。
ngOnInit() {
this._activatedRoute.data.subscribe((val) => {
console.log(val);
})
}
这就是我使用router.navigate() 以不同的queryParams 留在页面中的方式。
this._router.navigate([], { relativeTo: this._activatedRoute, queryParams: this.filterCriteria })
我的问题是 activatedRouteData subscription 在 first 时间获得已解决的 data。但是,一旦我应用过滤器并更改 queryParams,我的解析器就会运行并从服务器获取数据。但是,activatedRouteData subscription 永远不会收到任何新数据。
【问题讨论】:
标签: angular routes lazy-loading ionic4 resolve