2016-09-28 73 views
4

我想在我的Angular 2应用中掌握Redux状态管理,并且想知道Redux状态和Angular 2路由如何可以很好地一起玩。Redux状态和Angular 2路由

例如,我有各种视图(即具有单独路线的组件)采用日期或日期范围。因此,在我的应用栏中,我收到了一个按钮,它将显示用户选择日期的日历。该视图然后得到这个日期作为查询参数,

http://localhost:3000/view&date=20160928 

然后我就可以通过监听激活路由查询检索组件内部的日期参数

this.route.queryParams.subscribe(params => <load records for date>); 

现在我会怎么做这与终极版,也就是说,我应该如何将这个状态保存在Redux商店?起初,我以为我刚才得到的日期参数,并派遣其作为DATE_ACTION_CHANGE商店,然后又将听状态变化

date$ = this.ngRedux.select(state => state.date) 
    .subscribe(date => <load records for date>); 

是,这样做的推荐的方法?只要我只有一个可观察对象,它就可以工作。但是,我从各种来源获取参数。例如,另一个参数是客户的ID。这又是URL的一部分,

localhost:3000//client/45&date=20160928 

,当它变得很模糊,我应该用ID和日期更新存储,然后监听的状态这两个属性的改变?如果一个人改变了,但另一个不改变呢?我有一种感觉,我做错了,任何指针?

回答

4

你或许应该考虑什么是以下库:

https://github.com/ngrx/router-store(如果你使用的是NGRX /存储)。

它提供了将angular/router连接到ngrx/store的绑定。它还provdes以下仓库发送操作:

导航用一个新的状态成为历史

store.dispatch(go(['/path', { routeParam: 1 }], { query: 'string' })); 

导航与替代目前的状态在历史

store.dispatch(replace(['/path'], { query: 'string' })); 

导航没有推新的状态成为历史

store.dispatch(show(['/path'], { query: 'string' })); 

仅改变查询参数的导航ETERS

store.dispatch(search({ query: 'string' })); 

导航回

store.dispatch(back()); 

向前导航

store.dispatch(forward()); 

您还可以检查此一:https://github.com/dagstuan/ng2-redux-router

+0

请注意,与NGRX /平台的重构(主要版本4),您需要制作自己的路由器操作,如下所述:https://github.com/ngrx/platform/blob/maste R/MIGRATION.md#导航行动 – timbru31