2017-02-03 58 views
24

我参考路由器商店ngrx项目https://github.com/ngrx/router-store)。了解ngrx路由器商店项目的目的与仅使用角度2路由器相比

我不清楚如何使用此项目......

例如,让我们从项目文档下面的示例:

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

这是否意味着是用作替代的角2路由器:router.navigate(['/path...

...或者我应该只在某些情况下使用ngrx路由器存储吗? (如果是这样的话)

另外,当一个角度为2的路由器html链接时,ngrx路由器存储会发生什么。 <a routerLink="/heroes"被点击?

更一般地说,有人能解释一下ngrx路由器商店项目与使用plain angular 2路由器相比所取得的成果吗?

或者换句话说,除了角度2路由器之外,ngrx路由器存储还会带来什么?

编辑:一个有趣的关于ngrx的信息和示例源当然是ngrx示例应用程序(https://github.com/ngrx/example-app)。

我发现了一个依赖于路由器店有,但我一直没能找到其中的路由器,商店内的应用程序使用...

仅供参考,这里是在被发现的评论例如有关路由器商店应用:

@ NGRX /路由器店保持路由器的状态了最新的存储和使用 商店作为真理的对路由器的状态的单一来源。

回答

41

@ngrx/router-store存在,因此商店可能是应用程序路由状态的single source of truth

没有它,会有应用程序状态 - 当前路线 - 未在商店中显示。这意味着使用DevTools的时间旅行调试将不可能,因为代表路线的商店中没有状态,并且不会有代表路线更改的操作。

router-store不替代Angular路由器;它只是连接监听器,用于路由动作和路由器本身。

当您使用go action creator发出路由操作时,router-store会听到包含指定路径的"[Router] Go"操作,该操作会调用相应的路由器方法。当router-store从路由器听到路由已更改时,它会发出代表路由更改的"[Router] Update Location"操作,该操作会更新存储中的路由器状态。

如果,而是采用了go行动的创建者,一个routerLink被用于实现路由改变,router-store将听到的变化,会发出"[Router] Update Location"行动,将看到店里的路由器状态更新。

因此,无论路由是通过动作还是更传统的链接进行更改,商店始终包含路由器状态。

通过"[Router] Update Location"动作表示路由更改,您可以通过DevTools撤消所述路由更改 - 如果路由器状态未在商店中显示,那么这是不可能的。

如果你还没有使用的终极版DevTools,我建议你检查出来:

+4

此外,你可能有兴趣知道Angular v3路由器基于['@ ngrx/router'](https://github.com/ngrx/router),并且与[@ ngrx'团队一起构建](http:// angularjs.blogspot.com。 AU/2016/06 /改善注目换路由-in.html)。 – cartant

+6

我们是否在生产中将其删除?如果它的使用仅仅是为了帮助DevTools的页面转换,或者它可以用于其他任务 – ramon22

+0

@ ramon22:你是否得到了这个答案? –