2017-10-28 182 views
1

我現在使用谷歌搜索大約2周,但找不到任何合適的答案給我的問題。所以我在這裏問。角度4.4.6懶惰加載模塊中的共享服務

說明

工具:角4.4.6和角CLI 1.4.9

我有我的工作很簡單的應用程序。它有AuthModule,AdminModule,LayoutModule和SharedModule。一切工作正常,如果我將所有這些模塊添加到AppModule,但問題是,當我添加這些模塊的AppModule,然後我的供應商....大小遠遠超過600kb(--AOT)。

模塊說明。

ShareModule:有一些模型和服務是每個模塊共同的,例如, HttpServiceAuthModule:包含簡單的登錄和註冊組件使用HttpService的從共享模塊

所以我決定把它們與描述here路由所有懶加載的模塊。這將供應商... js的大小減少了近50%,但之後依賴關係不起作用。

儘管我在LazyLoaded模塊中引用了SharedModule,但仍不能解決問題,依賴關係不起作用。我知道,每個延遲加載的模塊都會創建自己的DI樹,但不會解決除已在延遲加載的模塊中創建和提供的依賴關係外的其他依賴關係。

正如我在工具部分所說的,我使用的是Angular-CLI,它具有在某些組件中使用兩次類似模塊的功能,如果這樣,那麼它會爲該模塊創建一個通用... js。但仍然問題依然存在,我無法訪問懶加載模塊中的共享服務。

是否有可能或任何人都可以指出我如何在懶加載模塊中加載共享服務?

感謝

回答

1

如果你想從延遲加載模塊的服務可作爲全局單和隨處可得,實現forRootAppModule進口MyLazyModule.forRoot()。這樣提供者就被全局註冊了,而其他的則被延遲加載。

有關更多詳細信息,請參見https://angular.io/guide/ngmodule#configure-core-services-with-coremoduleforroot

+0

感謝您指向我的鏈接,但它沒關係,如果我出口它的根或導入共享模塊。因爲所有共享服務都使用SharedModule中的共享模型,所以當我嘗試爲root導出服務時,它也會導出所有模型的根目錄。 – Riy

1

我找到了解決方案。其中提到的agar documentation之前沒有引起我的注意。

請勿在共享模塊中指定應用程序範圍內的單身人士providers。 A 延遲加載的模塊導入該共享模塊,使其自己的副本 服務。

你需要做的是不要從共享模塊提供和服務。只需在延遲加載的模塊中導入共享模塊並從該加載的模塊提供服務即可。

我希望這會幫助別人。

快樂編碼。 :)

+0

有了這種方法,懶惰的加載模塊可以共享相同的服務嗎?當試圖訪問另一個模塊設置的服務的公共屬性時,我在懶惰加載的模塊中得到了undefined。 – bomaboom