【发布时间】:2018-03-14 08:50:59
【问题描述】:
我有一个 Angular 4 应用程序,它使用 angular-router 在不同页面之间导航(我们称它们为 pageA 和 pageB)。 pageA 和 pageB 加载相同的项目列表 - sharedState.items(不时重新加载)。以下是这些页面的 redux 存储结构:
{
pageA: { ... }
pageB: { ..., noItemsMessage: null }
sharedState: { items: [], popupMessage: null, ... }
}
从服务器成功加载项目后一切都很好(sharedState 得到更新,并且两个页面在导航到时都显示更改)。但是当服务器返回错误时会出现问题 - 我想在弹出窗口中的 pageA 上显示错误消息,使用 sharedState.popupMessage - 这是在在应用程序中弹出。但是在 pageB 上它应该是一个小的本地工具提示,它位于 pageB.noItemsMessage 状态属性中。
我注册了 redux-observable 史诗来监听 pageA 和 pageB 副作用的“LOAD_ITEM_FAIL”操作,但做不同的事情,例如:
pageALoadItemsFailEpic = actions$ => actions$.ofType('LOAD_ITEM_FAIL')
.switchMap(x => { type: 'SHOW_POPUP', message: 'Error occured' })
pageBLoadItemsFailEpic = actions$ => actions$.ofType('LOAD_ITEM_FAIL')
.switchMap(x => { type: 'UPDATE_PAGE_B_TOOLTIP', message: 'Error occured' })
问题是,当我在 pageB 上时 - 显示错误工具提示并弹出错误消息,因为 pageALoadItemsFailEpic 也被执行。 (而且我不想在 pageB 上显示弹出窗口。)
最简单的方法似乎是跟踪当前导航到的页面并基于此执行副作用。但我想知道是否有更好的解决方案?或者有没有更好的方法来构建这种功能?有没有办法根据页面当前是否处于活动状态来打开/关闭史诗?提前致谢!
【问题讨论】:
标签: angular redux side-effects redux-observable