Kev*_*ing 3 ngrx ngrx-effects ngrx-store angular5 angular6
我是ngrx状态管理的新手,我正在使用@ ngrx / store和6.0.1的效果,假设我想保存一个新的成员联系人,所以我已经做好了以下准备:
成员效应
@Effect()
memberContactCreate$ = this.actions$.pipe(
ofType(MemberActions.MemberActionTypes.MemberContactCreate),
switchMap((action: MemberActions.MemberContactCreate) => {
return this.memberService.createMemberDetail(action.payload);
}),
map(
(response) => {
console.log('MemberContactCreate$ MemberContactCreate response: ', response);
if (!response.didError) {
return new MemberActions.MemberContactCreateSuccess(response.model as MemberDetailResponse);
} else {
return new MemberActions.MemberContactCreateFailure(response.errorMessage);
}
},
),
);
Run Code Online (Sandbox Code Playgroud)在我的成员联系组件提交中,我将调度创建动作
this.store.dispatch(new fromAction.MemberContactCreate(<MemberDetailRequest>this.memberDetailForm.value));
但是,我想显示一个敬酒或通知,如果我的成员从服务器成功创建(在我的@Effect方法中定义),则返回新动作“ MemberActions.MemberContactCreateSuccess ”,但是我如何才能在我的组件中捕获此动作呢?马上被发射?我试图做下面的事情并将其放在我的ngOnInit中,并认为它可以像订阅一样使用,但事实并非如此,实际上它每次都像页面加载一样触发,甚至我没有调度我的memberContactCreate操作...
this.store.select(fromSelector.getMemberCreateSuccess)
.subscribe((stateSelector) => {
console.log('getMemberCreateSuccess: ', stateSelector);
setTimeout(() => {
this.toastr('Hooray',
'New contact has been created successfully!');
}, 800);
this.tableData = stateSelector;
});
Run Code Online (Sandbox Code Playgroud)
那么,就像主题/订阅一样,我的组件如何与我触发的ngrx动作交互?我已经在线阅读了很多资料,但是大多数示例都停留在“ CreateSuccessful ”操作上,该操作只是将项目推入存储的对象列表中,之后没有继续的UI交互... **因此,组件应如何接收或捕获** MemberContactCreateSuccess / Failure操作,并让用户知道您的操作成功与否?
就个人而言,我不会处理组件中的通知,但会使用@ ngrx / effects显示/隐藏通知。我在“为此开始使用ngrx / effects”中简要介绍了这一点。
但是,如果确实有必要,您可以像在效果中一样聆听组件中的操作。您必须注入Actions组件,ofType
就像在效果中一样使用 运算符。唯一的区别是您必须订阅actions组件中的可观察对象(以ngrx / effects为您完成)。
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |