angular - 使用 Angular 解析器获取异步数据
问题描述
我的 Angular 8 应用程序中有解析器
export class UserResolver implements Resolve<any> {
constructor(
private authService: AuthService,
) { }
resolve() {
this.authService.user.subscribe(user => {
return user
})
}
}
但这是分配null
给路由器数据的,因为user
我的服务中带有异步功能(它来自主题)。如何让解析器等待从我的服务返回的数据,而不是为数据分配空值?
解决方案
两件事情:
1)删除subscribe
并让解析器处理订阅。
2) 返回 Observable,而不是数据。
像这样的东西:
export class UserResolver implements Resolve<any> {
constructor(
private authService: AuthService,
) { }
resolve() {
return this.authService.user;
}
}
更新:
我的工作,等待然后返回数据。我的看起来像这样:
constructor(private productService: ProductService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IProduct> {
const id = +route.paramMap.get('id');
return this.productService.getProduct(id);
}
请注意,没有订阅,我正在返回从 http get 操作返回的 Observable。
我的路由配置如下所示:
@NgModule({
imports: [
SharedModule,
InMemoryWebApiModule.forRoot(ProductData),
RouterModule.forChild([
{ path: 'products', component: ProductListComponent },
{
path: 'products/:id',
component: ProductDetailComponent,
resolve: { resolvedData: ProductResolver }
},
{
path: 'products/:id/edit',
component: ProductEditComponent,
resolve: { resolvedData: ProductResolver }
}
])
如果你想要工作代码,我在这里有一个更复杂的版本(由于添加了异常处理而更复杂):https ://github.com/DeborahK/Angular-Routing/tree/master/APM-Final
推荐阅读
- c# - C#如何检查代理服务器是否工作?
- javascript - VueJS中对象的过滤值
- python - Python检查字典中的列表是否满足两个条件
- python - 在单个时代向前或向后传递或两者中真正发生了什么?
- javascript - 为什么取消选择不适用于可选择和可拖动的多个项目
- javascript - 无法在另一个组件内调用路由器出口组件
- php - 在 Google 我的商家问题上创建本地帖子
- python - 在我的 Android 设备上针对打开的应用程序运行 python 脚本,无需重新启动应用程序
- flutter - FlutterFragmentActivity 中的 getWindow().addFlags(LayoutParams.FLAG_SECURE) 不起作用?
- c# - 使用 LINQ 首次找到重复元素(不连续)