我的效果是我需要传递从URL获得的ID。
我有一个具有路由器存储的根存储,还有一个我用于组件的存储,用于加载一些数据。
1。如何在我的特效内部的路由器存储中访问URL参数?
2。是否可以从我的组件效果访问根存储中的数据?
3。现在我有24322硬代码,我需要从根存储中获取。我应该发挥作用还是将其传递到有效载荷上?*
这是我的分量效果的代码
import { Injectable } from '@angular/core';
import { Effect, Actions, ofType } from '@ngrx/effects';
import { of } from 'rxjs';
import { map, switchMap, catchError } from 'rxjs/operators';
import * as fromRoot from '../../../store';
import * as topicActions from '../actions/topic.actions';
import { PostsService } from '../../../service/posts.service';
// need to connect with roter store
@Injectable()
export class TopicEffects {
@Effect()
loadTopic$ = this.actions$
.pipe(
ofType(topicActions.LOAD_TOPIC),
switchMap(() => {
return this.postService.getTopicHeader(24322).pipe(
map(topic => new topicActions.LoadTopicSuccess(topic)),
catchError(error => of(new topicActions.LoadTopicFail(error)))
);
})
);
constructor(private readonly actions$: Actions, private readonly postService: PostsService) {}
}
答案 0 :(得分:0)
要访问商店中的值,可以将商店注入TopicEffects中,然后使用withLatestFrom运算符。 https://www.learnrxjs.io/operators/combination/withlatestfrom.html。
它看起来像这样:
@Effect()
loadTopic$ = this.actions$
.pipe(
ofType(topicActions.LOAD_TOPIC),
withLatestFrom(this.routerStore.pipe(select(selectSomeValue)))
switchMap(([action, valueFromStore]) => {
return this.postService.getTopicHeader(valueFromStore).pipe(
map(topic => new topicActions.LoadTopicSuccess(topic)),
catchError(error => of(new topicActions.LoadTopicFail(error)))
);
})
);
是在回答您的问题吗?