Menggunakan komponen dari modul yang diimpor di dalam modul anak

Saya memiliki modul yang mengekspor komponen untuk mengeksposnya ke modul lain, saya ingin menggunakan komponen ini dalam modul yang merupakan anak dari modul lain, saya mengimpor modul pertama di modul induk untuk mengaktifkan penggunaan di dalam modul anak tetapi, saya Saya tidak sepenuhnya yakin bahwa itulah cara terbaik untuk melakukannya.

Ini adalah modul bersama saya di folder root dengan komponen yang ingin saya gunakan:

aplikasi/shared/shared.module.ts

import {dtComponent} from './dt.component';

@NgModule({
  imports: [
    CommonModule
  ],
  exports: [
    dtComponent
  ],
  declarations: [
    dtComponent
  ]
})
export class DatePModule{ }

Saya memiliki modul lain di folder aplikasi yang mengimpor DatePModule seperti ini:

aplikasi/kontak/contacts.module.ts

import {DatePModule} from '../shared/shared.module.ts';

@NgModule({
  imports: [
    CommonModule,
    DatePModule
  ]
})
export class CTModule{ }

Saya perlu menggunakan dtComponent secara langsung di beberapa komponen CTModule, tetapi juga memerlukan komponen ini di komponen lain yang ada di modul anak CTModule.

Saya dapat melakukannya dengan mengimpor lagi DatePModule ke dalam modul anak CTModule tetapi saya tidak yakin itu adalah pendekatan terbaik.

aplikasi/kontak/lainnya/lainnya.module.ts

import {DatePModule} from '../../shared/shared.module.ts';

@NgModule({
  imports: [
    CommonModule,
    DatePModule
  ]
})
export class OtherModule{ }

Pertanyaan saya mengapa saya perlu mengimpor lagi DatePModule jika sudah diimpor di modul induk? Jika saya menghapus impor ini di OtherModule komponen dtComponent tidak dikenali sebagai bagian dari modul.


person xzegga    schedule 14.08.2017    source sumber
comment
apakah Anda menggunakan pemuatan lambat?   -  person Max Koretskyi    schedule 14.08.2017
comment
@Maximus ya saya menggunakan pemuatan lambat untuk memuat semua modul dan komponen   -  person xzegga    schedule 14.08.2017
comment
baik, jawaban saya masih relevan, modul yang dibagikan dan dimuat lambat akan digabungkan dan enkapsulasi diselesaikan selama penggabungan   -  person Max Koretskyi    schedule 14.08.2017


Jawaban (1)


mengapa saya perlu mengimpor lagi DatePModule jika sudah diimpor di modul induk

Tidak ada hierarki antar modul yang Anda impor satu sama lain. Semua modul digabungkan menjadi satu pabrik definisi modul dengan semua komponen. Jika Anda menggunakan pemuatan lambat, hal yang sama tetap berlaku. Modul yang dimuat lambat dan modul bersama akan digabungkan dan tidak akan ada hierarki di antara keduanya.

Untuk mempelajari lebih lanjut, baca Menghindari kebingungan umum dengan modul di Angular. Berikut kutipannya:

Kebingungan terbesar mengenai imports dalam modul adalah pengembang menganggapnya membuat hierarki. Dan mungkin masuk akal untuk berasumsi bahwa modul yang mengimpor modul lain menjadi modul induk untuk impornya. Namun, bukan itu yang terjadi. Semua modul digabungkan selama tahap kompilasi. Dan dengan demikian modul yang tidak dimuat dengan lambat tidak membuat hierarki apa pun.

Namun, modul imports/exports dapat menerapkan enkapsulasi tipe yang dapat dideklarasikan selama kompilasi. Jika Anda ingin menggunakan tipe yang dapat dideklarasikan dari modul lain, Anda harus mengimpor modul ini secara eksplisit atau modul lain yang mengekspor ulang modul yang diperlukan. Kompilator mengontrol enkapsulasi saat menguraikan templat dan impor eksplisit memberikan konteks untuk mengetahui bahwa komponen tertentu dapat digunakan sebagai turunan dalam templat.

Saya dapat melakukannya dengan mengimpor lagi DatePModule di dalam modul anak CTModule tetapi saya tidak yakin itu adalah pendekatan terbaik.

Itu adalah pendekatan yang benar jika Anda ingin menggunakan tipe yang dapat dideklarasikan dari DatePModule di dalam OtherModule.

person Max Koretskyi    schedule 14.08.2017