基于@angular/router v3-beta,这些是必需的步骤。
实现一个返回 Observable 或普通值的解析器:
@Injectable()
export class HeroResolver implements Resolve {
constructor(
private service: HeroService
) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Hero> {
const id = +route.params['id'];
return Observable.fromPromise(this.service.getHero(id));
}
}
请注意,如果您返回一个 observable,解包后的值(第一个)将通过route.snapshot.data
. 如果您希望 observable 本身可用,则需要将其包装在另一个 Observable 中:
return Observable.of(source$);
将解析器添加到您的路线:
export const HeroesRoutes: RouterConfig = [
{ path: 'heroes', component: HeroListComponent, resolve: { heroes: HeroesResolver } },
{ path: 'hero/:id', component: HeroDetailComponent, resolve: { hero: HeroResolver } }
];
最后,提供您的解析类和任何对引导程序或主要组件的依赖项providers
:
bootstrap(AppComponent, [
HeroesResolver, HeroService
])
使用来自 ActivatedRoute 实例的解析数据:
ngOnInit() {
this.hero = this.route.snapshot.data['hero'];
}
请记住,快照表示组件类和解析器类中执行状态的值。使用这种方法无法从参数更新中刷新数据。
Plunker:http ://plnkr.co/edit/jpntLjrNOgs6eSFp1j1P?p=preview
源资料:https ://github.com/angular/angular/commit/f2f1ec0#diff-a19f4d51bb98289ab777640d9e8e5006R436