2017-02-03 57 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:你是否得到了這個答案? –