【发布时间】:2017-01-09 14:29:56
【问题描述】:
在ui-router 中,很容易在路由配置中定义多个解析,所以我们可以这样说:
export const APP_STATES: Ng2StateDeclaration[] = [
{
name: 'dashboard',
url: '/dashboard',
component: DashboardComponent,
resolve: [
{
token: 'playbookDurations',
deps: [DashboardService],
resolveFn: (svc: DashboardService) => svc.getPlaybookDurations()
},
{
token: 'playbookSuccesses',
deps: [DashboardService],
resolveFn: (svc: DashboardService) => svc.getPlaybookSuccesses()
},
{
token: 'playbookRuns',
deps: [DashboardService],
resolveFn: (svc: DashboardService) => svc.getPlaybookRuns()
},
{
token: 'activityLog',
deps: [DashboardService],
resolveFn: (svc: DashboardService) => svc.getActivityLog()
}
]
}
}];
当使用 Angular2 路由器时,需要您为 resolve 参数实现解析器模式。所以是这样的:
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Injectable } from '@angular/core';
import { DashboardService } from '.';
@Injectable()
export class DashboardResolver implements Resolve<any> {
constructor(private dashboardService: DashboardService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.dashboardService.get();
}
}
然后在我的路线中,我会做类似的事情:
import { DashboardComponent } from './dashboard.component';
import { DashboardResolver } from './dashboard.resolver';
export const routes = [
{
path: '',
children: [
{
path: '',
component: DashboardComponent,
resolve: {
data: DashboardResolver
}
}
]
}
];
问题是只有一个解决方案。如何像 ui-router 实现那样实现多个解析参数?
我想您有 2 个选项:为这些输入中的每一个实施解析器,或者让解析返回一个包含所有解析嵌套的对象。第一个看起来很正式,第二个听起来很老套,所以必须有更好的方法。
【问题讨论】:
-
你可以在 angular2 BTW 中继续使用 UIRouter :),我正在这样做。
-
是的,我知道。我只是在尝试;P
-
@amcdnl。您还需要这方面的帮助吗?
-
我认为任何反馈都会对每个人都有帮助@AngularFrance