2017-10-12 115 views
2

現在,雖然使用延遲加載,我加載了所有提供者在app.module.ts,我想這可能不是最好的策略,因爲這不會加快我的應用啓動時間,特別是因爲我已經有50個自定義提供者(不要評價我);)。懶惰加載和提供者策略

因此,我問我自己,如果我真的應該爲我的所有應用程序加載所有的應用程序,或者我應該加載它們只在我只使用它們?

我猜測只有在我真正使用它們的地方加載提供程序會更好。

但在這種情況下,這對我來說則並不清楚,在所有如何解決以下結構:

讓說我用自己的模塊和三個提供了三頁(A,B和C) (1,2和3)。

A use 1 
B use 1, 2, 3 
C use 1, 2 
  • 我猜,因爲1是跨所有應用程序使用,我必須聲明它在app.module.ts

  • 由於3只在網頁B的使用,我想我會只聲明它在B.module.ts

  • 但是2呢?我該如何在B.module.tsC.module.ts中聲明它,目標是共享相同的提供程序「內存」(如果提供程序包含一個值,B和C應該看到相同的對象),分別如何編碼?簡單地通過注射提供者「照常」和角度做其餘的?

THX提前任何幫助,將真正理解

UPDATE

不知道如果我理解正確的角度文檔但是這是目標,供應商應加載了所有的應用程序都很寬?

https://angular.io/guide/ngmodule-faq#q-component-scoped-providers

回答

1

應創建一個intenciate您的供應商2共享模塊,並在它們的依賴B和C模塊inculdes。

編輯:你不需要導出提供者。

+1

有趣的是,這將是一個沒有任何聲明的共享模塊嗎?就像@NgModule({providers:[2],exports:[2]}) –

+1

它可以工作,它是與我需要在多個其他模塊中的模塊。 – Flow

+0

會嘗試,會讓你知道,thx –

0

答案是你應該添加你的提供商在app.module.ts,因爲它是一個單身服務。下面是從angular dependency injection doc

依賴是注射器的範圍內單身

這意味着當你在app.module.ts聲明你的供應商將是單身在整個應用程序和每一個模塊注入將共享它的同一個實例。
當你在獨立的模塊中聲明你的提供者時,e B.module.tsC.module.ts,您的B page將使用提供者的一個實例,C page將使用另一個提供者的實例。這不是提供者的目的。

+1

是的,我認爲你是對的,在結束這個問題之前,可以在本地做更多的測試。 Thx –

+0

@PeterParker:你測試了嗎? – Duannx

+0

對不起,我在時間之後,沒有,很可能沒有時間來測試這個星期。關於「這不是提供者的目的」我不會說是和否。是的,如果你想單身人士,你必須在app.module中聲明它們,但是角度似乎也表明限制組件範圍來聲明模塊中的提供程序是可以的,請參閱https://angular.io/導向/ ngmodule-FAQ#應-I-附加其他的提供到一個模塊或 - 一個組分 –