我正在尝试在我的 Angular 2 应用程序中掌握 Redux 状态管理,并且想知道 Redux 状态和 Angular 2 路由如何可以很好地协同工作。
例如,我有采用日期或日期范围的各种视图(即具有单独路由的组件)。所以在我的应用栏中,我有一个按钮,可以显示一个日历,供用户选择日期。然后视图获取这个日期作为查询参数,
http://localhost:3000/view&date=20160928
Run Code Online (Sandbox Code Playgroud)
然后我可以通过监听激活的路由查询参数来检索组件内的日期
this.route.queryParams.subscribe(params => <load records for date>);
Run Code Online (Sandbox Code Playgroud)
现在我将如何使用 Redux 做到这一点,也就是说,我应该如何仅将状态保留在 Redux 存储中?起初我以为我只需要获取日期参数并将其发送DATE_ACTION_CHANGE到商店,然后依次监听状态变化
date$ = this.ngRedux.select(state => state.date)
.subscribe(date => <load records for date>);
Run Code Online (Sandbox Code Playgroud)
这是推荐的方法吗?只要我只有一个可观察对象,它就可以正常工作。但是,我从各种来源获取参数。例如,另一个参数是客户的 ID。那又是 URL 的一部分,
localhost:3000//client/45&date=20160928
Run Code Online (Sandbox Code Playgroud)
那是当它变得朦胧时,我应该用 ID 和日期更新商店,然后监听状态中的两个属性发生变化吗?如果一个改变了,而另一个没有怎么办?我有一种感觉我做错了,有什么指示吗?
您可能应该考虑的是以下库:
https://github.com/ngrx/router-store(如果您使用的是 ngrx/store)。
它提供了将 angular/router 连接到 ngrx/store 的绑定。它还提供以下商店调度操作:
以新状态导航进入历史
store.dispatch(go(['/path', { routeParam: 1 }], { query: 'string' }));
Run Code Online (Sandbox Code Playgroud)
导航替换历史中的当前状态
store.dispatch(replace(['/path'], { query: 'string' }));
Run Code Online (Sandbox Code Playgroud)
导航而不将新状态推入历史
store.dispatch(show(['/path'], { query: 'string' }));
Run Code Online (Sandbox Code Playgroud)
仅更改查询参数的导航
store.dispatch(search({ query: 'string' }));
Run Code Online (Sandbox Code Playgroud)
导航回来
store.dispatch(back());
Run Code Online (Sandbox Code Playgroud)
向前导航
store.dispatch(forward());
Run Code Online (Sandbox Code Playgroud)
你也可以检查这个:https : //github.com/dagstuan/ng2-redux-router
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |