我的Angular 8应用中有解析器
import "github.com/my/mod/v2/mypkg"
但这是将export class UserResolver implements Resolve<any> {
constructor(
private authService: AuthService,
) { }
resolve() {
this.authService.user.subscribe(user => {
return user
})
}
}
分配给路由器数据,因为null
在我的服务中带有异步功能(来自主题)。如何让解析程序等待服务中的数据返回,而不为数据分配空值?
答案 0 :(得分:0)
两件事:
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