从Angular 8应用程序中的效果访问状态
我正在与Metronic合作,这是一个以Angular编写的入门/管理网站 我试图做的是使用经过身份验证的用户id加载一组特定的数据 这就是我的效果:从Angular 8应用程序中的效果访问状态,angular,ngrx,Angular,Ngrx,我正在与Metronic合作,这是一个以Angular编写的入门/管理网站 我试图做的是使用经过身份验证的用户id加载一组特定的数据 这就是我的效果: @Injectable() export class ProjectEffects { @Effect() loadAllProjects$ = this.actions$ .pipe( ofType<AllProjectsRequested>(ProjectActionTyp
@Injectable()
export class ProjectEffects {
@Effect()
loadAllProjects$ = this.actions$
.pipe(
ofType<AllProjectsRequested>(ProjectActionTypes.AllProjectsRequested),
withLatestFrom(this.store.pipe(select(allProjectsLoaded))),
filter(([action, isAllProjectsLoaded]) => !isAllProjectsLoaded),
mergeMap(() => this.projectService.getProjectsByOwnerId(4)),
map(result => {
return new AllProjectsLoaded({projects: result});
}),
catchError(error => {
console.debug("error [%s]", error);
return of({ results: null });
})
);
@Effect()
init$: Observable<Action> = defer(() => {
return of(new AllProjectsRequested());
});
constructor(private actions$: Actions, private projectService: ProjectService, private store: Store<AppState>) { }
}
我遇到的问题是如何从存储中获取当前用户,并将user.id值传递到this.projectService.getProjectsByOwnerIdn
我已经尝试了许多不同的组合
this.user$=this.store.pipeselectcurrentUser
并在没有任何运气的情况下订阅可观察到的
以同步方式从应用商店访问currentUser的正确方法是什么?您很接近,可以使用LatestFrom,就像您对所有已加载的项目所做的那样
例如:
@Effect()
getOrder = this.actions.pipe(
ofType<GetOrder>(ActionTypes.GetOrder),
withLatestFrom(action =>
of(action).pipe(
this.store.pipe(select(getOrders))
)
),
filter(([{payload}, orders]) => !!orders[payload.orderId])
mergeMap([{payload}] => {
...
})
)
有关更多信息,请参阅
@Effect()
getOrder = this.actions.pipe(
ofType<GetOrder>(ActionTypes.GetOrder),
withLatestFrom(action =>
of(action).pipe(
this.store.pipe(select(getOrders))
)
),
filter(([{payload}, orders]) => !!orders[payload.orderId])
mergeMap([{payload}] => {
...
})
)