當使用分級注射時,非根注射器中提供的依賴的壽命是多少?分級注射器和依賴壽命
語境:
我的角2個應用程序由多個部分組成。根組件中有一個@RouteConfig
,其中包含組件A
,B
和C
的路由。組件B
有小孩@RouteConfig
到第x
和y
。
/A
/B
/x
/y
/C
組件x
需求的服務q
。如圖J. Papa's Angular 2 style guide建議,我在組件x
一級提供的服務給噴射器,即
@xComponent({
providers: [q]
})
export class xComponent { ... }
服務q
請求和內部緩存一些數據。我的印象是服務是單身人士,隨後訪問/B/x
時,數據將從緩存中提供。但是,通過上述設置,每次用戶打開/B/x
時,都會再次請求數據。我在服務q
的構造函數中輸入console.log("creating q")
,並看到只要訪問了/B/x
,就會創建一個新的服務實例。
如果我提供在部件/B
的水平的服務,/B/x
和/B/y
之間導航時的值被緩存,但導航到任何/A
或/C
時丟失。
無論何時組件被破壞,噴射器似乎都被銷燬。這是預期的行爲?
什麼是正確的方式來配置應用程序,使該服務不會被重新創建?很明顯,我可以在根組件級別提供服務,但也許我錯過了一些東西?
謝謝,「與組件一起銷燬」的部分就是我所缺少的。我想知道 - 這是否記錄在任何地方?它似乎沒有在thetram.io文章中提及,也沒有在Angular 2文檔中提及。 –
@RonaldZarīts我不這麼認爲,但這是邏輯的方式,因爲否則,你會得到大量注入器在一個巨大的應用程序中。 – Dinistro