存在angular 2問題,重新初始化更多整體應用程序比我認爲它會在路線導航。創建一個快速演示我複製了角2路由教程plunker揭露問題:Angular 2 RC5子路由重載包含組件和模塊
http://plnkr.co/edit/wAjaIAva0caufEZJG36s?p=preview
在這個熟悉的前瞻性的演示,危機中心的路線是懶加載從危機center.module 。我在危機中心頁面上添加了一些「小部件」佔位符。如果你點擊'危機中心'鏈接,然後使用'添加小部件'鏈接幾次增加,然後點擊其中一個子目錄,你會注意到兩個小部件計數器被重新初始化。
看來,危機center.module,危機。服務它提供的,和危機center.component都是完全重新初始化隨着每個路線的變化!對於簡單的系統來說,這可能不是問題,但與危機中心模塊提供的危機服務相關的任何重要的狀態數據(例如API會話)將在每次導航時丟失,而不像任何數據app.module提供的app.service。
考慮這個應用程序佈局,這更接近我的實際問題的應用程序:
|- /app
| |- app.component
| |- app.module
| |- app.routing <-- app routes, including lazy load for feature.module for all /feature routes (loadChildren)
| |- app-api.service <-- provided by app.module, handles master auth
| |- /feature
| | |- /child-feature
| | | |- child-feature-1.component <-- displays in feature.component's router-outlet
| | | '- child-feature-2.component <-- displays in feature.component's router-outlet
| | |- feature-api.service <-- this feature's api, provided by feature.module
| | |- feature-container.component <-- has a router-outlet for child-features
| | |- feature-menu.component <-- displays in feature.component
| | |- feature-status.component <-- displays in feature.component
| | |- feature.module <-- provides feature-api.service
| | '- feature.routing <-- feature routes, loaded in feature.module
| |- /other-feature
| | |- other-feature.component
| | |- other-feature-list.component
| | |- other-feature-detail.component
| | |- other-feature.module
| | '- other-feature.routing
| '- main
|- /node_modules
|- /typings
|- index.html
|- systemjs.config.js
'- tsconfig.json
在我的應用程序
,「feature.module」需要身份驗證到一個特定的API,但是這AUTH沒有在其他任何需要應用程序的區域。因此,我只想在該模塊中加載api服務,將其與應用程序的其餘部分隔離。就像在演示中一樣,這個api在每個路由導航之間重新初始化。功能容器中的路由器出口外部的功能菜單和功能狀態也會在每個路由導航中重新初始化。
這看起來真的是違反直覺 - 不應該只是改變了子導航的內部路由器插座組件?同樣,一旦模塊(以及它提供的任何服務)被加載,它們是不是應該成爲整個應用程序的一部分,並且不會在每個路由導航中重新初始化?
我想我的問題是,「角2應該有這種行爲?」如果答案是'是',那麼「我應該如何在子模塊中保持有狀態服務?」還有「是否有強制導航的方法只適用於最內層的路由器插座(不使用命名插座)?」
非常感謝您閱讀這本中篇小說,並非常感謝您的任何意見。改寫了問題有望使其更清晰;)