Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Angular 8应用程序中的效果访问状态_Angular_Ngrx - Fatal编程技术网

从Angular 8应用程序中的效果访问状态

从Angular 8应用程序中的效果访问状态,angular,ngrx,Angular,Ngrx,我正在与Metronic合作,这是一个以Angular编写的入门/管理网站 我试图做的是使用经过身份验证的用户id加载一组特定的数据 这就是我的效果: @Injectable() export class ProjectEffects { @Effect() loadAllProjects$ = this.actions$ .pipe( ofType<AllProjectsRequested>(ProjectActionTyp

我正在与Metronic合作,这是一个以Angular编写的入门/管理网站

我试图做的是使用经过身份验证的用户id加载一组特定的数据

这就是我的效果:

@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}] => {
    ...
  })
)