我是Angular 2+的新手。有些人在http服务获取数据和组件之间使用解析器。
export class UserResolver implements Resolve<User> {
constructor(
private service: UserService,
private router: Router
) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<User> {
const id = route.paramMap.get('id');
return this.service.getUser(+id)
.catch(err => {
console.error(err); // deal with API error (eg not found)
this.router.navigate(['/']); // could redirect to error page
return Observable.empty<User>();
});
}
}
问题是:
答案 0 :(得分:4)
看一下Angular Resolvers的介绍。 查看下面的步骤,请注意,在第2步中,您的示例将返回一个Observable。
引用文章:
所以解析器基本上就是中间代码,可以在单击链接时和加载组件之前执行。
......这是高级方法:
常规路由流程
使用解析程序的路由流程
步骤2,3和4使用名为Resolver的代码完成。
答案 1 :(得分:1)
感谢Jim Cooper Pluralsight课程: https://app.pluralsight.com/player?course=angular-fundamentals&author=jim-cooper&name=angular-fundamentals-m5&clip=8&mode=live
如果没有Resolver的第一种方法,我们需要等到数据通过asyncronous subscribe加载。在组件中,一些元素立即显示,一些元素在Observable.subscribe调用之后显示。
在第二种情况下,解析器捕获所有数据并将其传递给组件 在加载所有组件之前,组件中的数据不会显示。
因此解析器有助于在显示组件之前烹饪数据。