Pracuję nad Ionic
aplikacją ( 2.0.0-rc0
), która zależy od angular 2
. Więc uwzględniono nowe wprowadzenie ngModules
. Dodaję app.module.ts.
poniżej.
import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { Users } from '../pages/users/users';
@NgModule({
declarations: [
MyApp,
Users
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
Users
]
})
export class AppModule {}
Co entryComponents
tu robi? Components
są już zdefiniowane w declarations
. Więc po co je powtarzać? Co by się stało, gdybym nie dołączał tutaj komponentu?
declared
w programie,ngModule
ale nigdy nie są używane. angular.io/docs/ts/latest/cookbook/... entrycomponents -Odpowiedzi:
Dotyczy to dynamicznie dodawanych składników, które są dodawane za pomocą
ViewContainerRef.createComponent()
. Dodanie ich doentryComponents
nakazuje kompilatorowi szablonów offline, aby je skompilował i utworzył dla nich fabryki.Komponenty zarejestrowane w konfiguracjach tras są również dodawane automatycznie,
entryComponents
ponieważrouter-outlet
używają równieżViewContainerRef.createComponent()
do dodawania komponentów trasowanych do DOM.Kompilator szablonów offline (OTC) tworzy tylko te komponenty, które są rzeczywiście używane. Jeśli komponenty nie są używane bezpośrednio w szablonach, OTC nie może wiedzieć, czy należy je skompilować. Dzięki entryComponents możesz powiedzieć OTC, aby również skompilował te komponenty, aby były dostępne w czasie wykonywania.
Co to jest składnik wejściowy? (angular.io)
Dokumentacja NgModule (angular.io)
Jeśli nie wymienisz dynamicznie dodawanego komponentu
entryComponents
, otrzymasz komunikat o błędzie dotyczący brakującej fabryki, ponieważ Angular jej nie utworzy.Zobacz też https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
źródło
entryComponents
możesz powiedzieć OTC, aby również skompilował te komponenty, aby były dostępne w czasie wykonywania.declarations
, powinien być również wymieniony wentryComponents
, prawda?createComponent
w kodzie lub na przykład router, który również używa tego interfejsu API do dodawania komponentów.Nie uzyskasz lepszego wyjaśnienia niż dokumenty Angular: entry-components i ngmodule-faq .
A poniżej znajduje się wyjaśnienie z dokumentacji kątowej.
źródło
EntryComponent
czy powinniśmy usunąćselector
atrybut? (ponieważ nie będzie używany)Inne odpowiedzi wspominają o tym, ale podstawowe podsumowanie to:
<my-component />
Komponenty okna dialogowego materiałów są tworzone w kodzie TS, a nie w szablonie:
Wymaga to zarejestrowania go jako elementu wpisu:
entryComponents: [MyExampleDialog]
W przeciwnym razie pojawi się błąd:
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
źródło
Tablica entryComponents służy do definiowania tylko komponentów, które nie zostały znalezione w html i zostały utworzone dynamicznie. Angular wymaga tej wskazówki, aby znaleźć element wejściowy i skompilować go.
Istnieją dwa główne typy elementów wejściowych:
Bardziej szczegółowe informacje na temat elementów wejściowych można znaleźć pod adresem angular.io https://angular.io/guide/entry-components
źródło
Trochę informacji na temat
entryComponent
entryComponent
to dowolny składnik Obciążenia kątowe bezwzględnie. Możesz zadeklarowaćentryComponent
, ładując go wNgModule
definicjach tras lub w definicjach tras.Dokumentacja mówi poniżej
Teraz odpowiemy na Twoje konkretne pytanie dotyczące
entryComponents
W pliku jest
entryComponents
tablica@NgModule
. Możesz użyć tego, aby dodać,entryComponents
jeśli składnik jest ładowany przy użyciuViewContainerRef.createComponent()
.Oznacza to, że tworzysz komponenty dynamicznie, a nie przez ładowanie początkowe lub szablon.
źródło
Od wersji Angular 9
entryComponents
nie jest już wymagana dzięki Ivy, która pozwala na wycofanie tej funkcji, a zatem można ją usunąć z deklaracji modułów.Przestarzałe interfejsy API i funkcje -
entryComponents
iANALYZE_FOR_ENTRY_COMPONENTS
nie są już potrzebneBluszcz kątowy
źródło