각 ng 모듈의 엔트리 구성 요소란 무엇입니까?
는 작업중다니에서 일하고 .Ionic( 앱앱()2.0.0-rc0하는 것.angular 2 그서새로소개는운의 소개.ngModules포함됩니다.추가합니다.app.module.ts.
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 {}
가 입니까?entryComponents여기서 하십니까? Components 에이정어 있다니습에 되어 있습니다.declarations그래서 그것들을 반복할 필요가 무엇입니까?여기에 구성 요소를 포함하지 않으면 어떻게 됩니까?
참고: EntryComponent는 Angular 9.0.0에서 더 이상 사용되지 않습니다. 자세한 내용은 Angular 문서를 참조하십시오.
은 이다음사용추여가동는되추것다구대입니를 사용하여 추가되는 입니다.ViewContainerRef.createComponent()에 entryComponents에서는 오프라인 템플릿 컴파일러에 컴파일하고 해당 템플릿을 위한 공장을 생성하도록 지시합니다.
요소는 으로 경로구등구요다자추가다에 됩니다.entryComponents또한 왜냐하면router-outlet또한 사용합니다.ViewContainerRef.createComponent()라우팅된 구성 요소를 DOM에 추가합니다.
OTC(Offline Template Compiler)는 실제로 사용되는 구성 요소만 빌드합니다.구성 요소가 템플릿에 직접 사용되지 않으면 OTC는 구성 요소를 컴파일해야 하는지 여부를 알 수 없습니다.구성요소 항목을 사용하면 OTC에 이 구성요소도 컴파일하여 런타임에 사용할 수 있도록 할 수 있습니다.
이 구성 요소를 정의할 때 컴파일해야 하는 구성 요소도 정의합니다.여기에 나열된 각 구성 요소에 대해 Angular는 Component Factory를 생성하여 Component Factory Resolver에 저장합니다.
요소를 동적로구요에 나열하지 entryComponentsAngular에서 공장을 만들지 않았기 때문에 누락된 공장에 대한 오류 메시지가 표시됩니다.
https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html 도 참조하십시오.
다른 답변에서는 이를 언급하지만 기본 요약은 다음과 같습니다.
- 구성요소가 html에서 사용되지 않을 때 필요합니다. ex:
<my-component /> - 예를 들어, 간접적으로 사용하는 Angular Material Dialogs(각형 재료 대화 상자)의 경우 HTML이 아닌 TS 코드 내부에 생성됩니다.
openDialog() {
const dialogRef = this.dialog.open(MyExampleDialog, { width: '250px'});
}
이를 위해서는 항목으로 등록해야 합니다. 구성 요소:
entryComponents: [MyExampleDialog]
그렇지 않으면 다음 오류가 발생합니다.
ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?
Angular docs: 엔트리 구성 요소 및 ngmodule-faq보다 더 나은 설명을 얻을 수 없습니다.
그리고 아래는 각진 문서들의 설명입니다.
입력 구성요소는 Angular가 유형별로 필수적으로 로드하는 모든 구성요소입니다.
선택기를 통해 선언적으로 로드된 구성 요소는 항목 구성 요소가 아닙니다.
대부분의 응용 프로그램 구성 요소는 선언적으로 로드됩니다.Angular는 구성 요소의 선택기를 사용하여 템플릿에서 요소를 찾습니다.그런 다음 구성 요소의 HTML 표현을 만들고 선택한 요소의 DOM에 삽입합니다.항목 구성요소가 아닙니다.
일부 구성 요소는 동적으로 로드될 뿐 구성 요소 템플릿에서 참조되지 않습니다.
루트
AppComponent항목 구성 요소입니다.index.html.html의 합니다.그렇지만index.html구요아닙다니이템릿플소성▁and다입니다.AppComponent선택기가 구성 요소 템플릿의 요소와 일치하지 않습니다.AppComponent에 되어 있기 에 AppComponent를 합니다.
@NgModule.bootstrap모듈의 ngDoBootstrap 메서드를 사용하여 명령적으로 boostrap을 적용할 수도 있습니다.경로 정의의 구성요소도 항목 구성요소입니다.경로 정의는 구성 요소를 유형별로 나타냅니다.구성 합니다.
RouterOutlet.컴파일러는 이러한 항목 구성 요소를 다른 구성 요소 템플릿에서 찾아 검색할 수 없습니다.당신은 그것들을 추가하여 그것들에 대해 말해야 합니다.
entryComponents리스트에합니다.의 Angular에 과 같은 으로 추가합니다.
entryComponents:
- 에 있는
@NgModule.bootstrap리스트에합니다.- 라우터 구성에서 참조되는 구성 요소입니다.
이러한 구성 요소를 명시적으로 언급할 필요는 없지만, 그렇게 하는 것은 해롭지 않습니다.
앵귤러 9 기준 entryComponentsIvy 덕분에 이 기능이 더 이상 필요하지 않으므로 모듈 선언에서 제거할 수 있습니다.
되지 않는 및 기능 - 사되지않 API 능기 -entryComponents그리고.ANALYZE_FOR_ENTRY_COMPONENTS 이상 하지 않습니다.
이에전.
entryComponents의NgModule정의는 동적으로 생성되고 삽입될 구성 요소를 컴파일러에 알려주는 데 사용되었습니다.아이비와 함께라면, 이것은 더 이상 요구사항이 아닙니다.entryComponents기존 모듈 선언에서 어레이를 제거할 수 있습니다.▁the도 입니다.ANALYZE_FOR_ENTRY_COMPONENTS주사 토큰
Ivy는 Angular의 차세대 컴파일 및 렌더링 파이프라인의 코드 이름입니다.Angular 버전 9 릴리스에서는 View Engine으로 알려진 이전 컴파일러 및 런타임 대신 새 컴파일러 및 런타임 명령이 기본적으로 사용됩니다.
entryComponents 배열은 html에서 찾을 수 없고 동적으로 생성된 구성 요소만 정의하는 데 사용됩니다.Angular는 항목 구성 요소를 찾아 컴파일하려면 이 힌트가 필요합니다.
엔트리 구성 요소에는 두 가지 주요 유형이 있습니다.
- 부트스트랩된 루트 구성 요소입니다.
- 경로 정의에서 지정하는 구성 요소입니다.
엔트리 구성요소에 대한 자세한 내용은 angular.io 을 참조하십시오. https://angular.io/guide/entry-components
Angular 13.1에서는 Entry Component가 더 이상 사용되지 않습니다.참조: https://github.com/angular/angular/blob/master/CHANGELOG.md#1310-2021-12-09
참고 항목: https://angular.io/guide/deprecations#entrycomponents-and-analyze_for_entry_components-no-longer-required
에 대한 약간의 .entryComponent
entryComponent임의의 구성 요소 각도 부하입니다.▁declare로 선언할 수 .entryComponent그것을 안에 가두어서.NgModule또는 경로 정의에 있습니다.
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpClientModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent] // bootstrapped entry component
})
설명서에는 다음과 같이 나와 있습니다.
두 가지 유형의 구성 요소를 비교하기 위해 템플릿에 포함된 구성 요소가 있으며, 이는 선언적입니다.또한 필수적으로 로드하는 구성 요소, 즉 항목 구성 요소가 있습니다.
이제 당신의 구체적인 질문에 대답하겠습니다.entryComponents
이 .entryComponents을 의열로 표시합니다.@NgModulefile.해서 입니다를 추가할 수 . 이것을 사용하여 추가할 수 있습니다.entryComponents구성 요소가 다음을 사용하여 부트스트랩되는 경우ViewContainerRef.createComponent().
즉, 부트스트랩이나 템플릿을 사용하지 않고 동적으로 구성 요소를 생성하는 것입니다.
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(myComp.component);
const viewContainerRef = this.compHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
언급URL : https://stackoverflow.com/questions/39756192/what-is-entrycomponents-in-angular-ngmodule
'codememo' 카테고리의 다른 글
| PHP의 Excel로 MySQL 데이터 내보내기 (0) | 2023.05.08 |
|---|---|
| Swift: print() vs println() vs NSLog() (0) | 2023.05.03 |
| Xcode 4: .xarchive 대신 IPA 파일 생성 (0) | 2023.05.03 |
| HTML 표의 단어 모음 (0) | 2023.05.03 |
| 'DOMAIN\MACHINE$' 사용자에 대한 로그인 실패 (0) | 2023.05.03 |