我已经将自己的项目从5版本移到了angular 6,@ angular-redux / store 9。一切都很好,但是在中间件中注册史诗的方法不起作用。我从中间件中删除了所有的史诗,除了记录器和启动都可以执行的所有动作。然后我尝试添加一个史诗,并得到类似
的错误TypeError: action$.pipe is not a function
at SecurityUserEpics.loadSecurityUser (security-user.epic.ts:31)
at combineEpics.js:19
然后,我尝试解决此问题并搜索许多有关的示例和文档,但找不到解决方案。在决定在这里提出问题并准备问题代码后,找到了解决方案。太好了,我在这里发布该解决方案,希望这可以为某人节省时间。 史诗:
loadSecurityUser = (action$) => {
debugger;
// here i have object of type : {getState: ƒ, dispatch: ƒ} and thats was pain from older version. pipe helps!
return action$.pipe(
ofType(SecurityUserActions.LoadSecurityUsers),
switchMap(q => this._dataSrv.getUserInfo()
.pipe(map(data => {
localStorage.setItem('isNeedRelogin', '0');
return this._securityUserActions.loadSecurityUserComplete(data);
}))));
}
最后的配置存储区:
const epicMiddleware = createEpicMiddleware();
const middleware = [epicMiddleware];
middleware.push(createLogger());
ngRedux.configureStore(combinedReducer, INITIAL_STATE, middleware, storeEnhancers);
const rootEpic = combineEpics(this._securityUserEpics.loadSecurityUser);
// this is new way of middleware registration
epicMiddleware.run(rootEpic);
答案 0 :(得分:0)
例如,使用ProvideStore而不是configureStore-
user
有关史诗的更多信息-https://redux-observable.js.org/docs/basics/Epics.html