請問單純的共用 Module,包含 imports 有什麼作用?

我在 https://material.angular.io/guide/getting-started 這裡看到這段代碼:

import {MatButtonModule, MatCheckboxModule} from '@angular/material';

@NgModule({
  imports: [MatButtonModule, MatCheckboxModule],
  exports: [MatButtonModule, MatCheckboxModule]
})
export class MyOwnCustomMaterialModule { }

imports 與 exports 都給了相同的 modules,
但我測試 imports 沒給這些 modues 也是可以執行的,像下面這樣:

import {MatButtonModule, MatCheckboxModule} from '@angular/material';

@NgModule({
  exports: [MatButtonModule, MatCheckboxModule]
})
export class MyOwnCustomMaterialModule { }

請問在這有 imports 這些 modules 的作用是什麼? 哪個才是比較好的風格?

1個讚

我能想到的第一個原因是這個

https://angular.io/guide/ngmodule-faq#what-if-i-import-the-same-ngmodule-twice

我是想問說,既然 imports 不用匯入那些 modules,為什麼他的範例還要多此一舉?

如果你在這個module內部有使用該個module的部分內容,那麼需要import,

反之則不需,不過其實就算import也是沒關係的,在最後大小上不會影響。

Material的範例是一個比較保險的做法,或許他們那一天內部的module不再獨立了,而是有相依其他component,那麼這個時候import就有意義了,或是你在mymaterialmodule裡面放了其他自己定義的component有使用到material其中的component(當然不建議這麼做)。

我自己是都有import,自己測試過大小沒有差異。

1個讚

當所 imports 的 module 有重複時, Angular 內部會怎麼處理呢?
基本上是只會產生一次,後面有再次 Imports 的人,就會直接取之前的有產生過的 module。
基於這個理由,預先 Imports 一次,之後有載入這個 Modules 的人,就不需要重新再建立了

當然你也可以只 exports 不 imports。

感謝~ 如果只是該原因的話,我就放心了

1個讚

@Kevin 感謝,這回答你有貼連結了,
只是我主要不是問不同地方重複 import 相同 module 會導致什麼問題,
問題比較偏 @YouShun 所回答的方向。

1個讚