ホームページ  >  記事  >  ウェブフロントエンド  >  Angular エントリコンポーネントと宣言コンポーネントのケースの比較

Angular エントリコンポーネントと宣言コンポーネントのケースの比較

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-25 15:01:051470ブラウズ

今回は、Angular エントリ コンポーネントと宣言型コンポーネントのケースの比較について説明します。Angular エントリ コンポーネントと宣言型コンポーネントのケースを使用する際の 注意事項 について、実際のケースを見てみましょう。

前書き

コンポーネントは Angular の非常に重要な部分です。次の記事では、Angular のエントリ コンポーネント (エントリ コンポーネント) と Angular の宣言コンポーネントとエントリ コンポーネントの違いについて説明します。 2 つのロード方法の違いに反映されています。

  • 宣言コンポーネントは、コンポーネントによって宣言されたセレクターを通じてロードされます

エントリコンポーネントは、コンポーネントのタイプを通じて動的にロードされます

宣言コンポーネント

宣言コンポーネントはテンプレートに含まれますコンポーネントによって宣言されたセレクターを介してコンポーネントをロードします。

@Component({
 selector: 'a-cmp',
 template: `
 <p>这是A组件</p>
 `
})
export class AComponent {}
@Component({
 selector: 'b-cmp',
 template: `
 <p>在B组件里内嵌A组件:</p>
 <a-cmp></a-cmp>
 `
})
export class BComponent {}
BComponent のテンプレートで、selector<a-cmp></a-cmp> ステートメントを使用して AComponent をロードします。

selector<a-cmp></a-cmp>声明加载AComponent。

入口组件(entry component)

入口组件是通过指定的组件类加载组件。

主要分为三类:

  • @Ng<a href="http://www.php.cn/code/8212.html" target="_blank">Module</a>.<a href="http://www.php.cn/wiki/1505.html" target="_blank">bootstrap</a>里声明的启动组件,如AppComponent。

  • 路由配置里引用的组件

  • 其他通过编程使用组件类型加载的动态组件

启动组件

app.component.ts

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.scss']
})
export class AppComponent{}

app.module.ts

@NgModule({
 declarations: [
 AppComponent
 ],
 imports: [
 BrowserModule,
 BrowserAnimationsModule,
 AppRoutingModule
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

在bootstrap里声明的AppComponent为启动组件。虽然我们会在index.html里使用组件的selector<app-root></app-root>的位置,但是Angular并不是根据此selector来加载AppComponent。这是容易让人误解的地方。因为index.html不属于任何组件模板,Angular需要通过编程使用bootstrap里声明的AppComponent类型加载组件,而不是使用selector。

由于Angular动态加载AppComponent,所有AppComponent是一个入口组件。

路由配置引用的组件

@Component({
 selector: 'app-nav',
 template: `
 <nav>
 <a routerLink="/home" routerLinkActive #rla="routerLinkActive" selected="#rla.isActive">首页</a>
 <a routerLink="/users" routerLinkActive #rla="routerLinkActive" selected="#rla.isActive">用户</a>
 </nav>
 <router-outlet></router-outlet>
 `
})
export class NavComponent {}

我们需要配置一个路由

const routes: Routes = [
 {
 path: "home",
 component: HomeComponent
 },
 {
 path: "user",
 component: UserComponent
 }
];
@NgModule({
 imports: [RouterModule.forRoot(routes)],
 exports: [RouterModule]
})
export class AppRoutingModule { }

Angular根据配置的路由,根据路由指定的组件类来加载组件,而不是通过组件的selector加载。

配置入口组件

在Angular里,对于入库组件需要在@NgModule.entryComponents里配置。

由于启动组件和路由配置里引用的组件都为入口组件,Angular会在编译时自动把这两种组件添加到@NgModule.entryComponents里。对于我们自己编写的动态组件需要手动添加到@NgModule.entryComponents

Entryコンポーネント(エントリーコンポーネント)

エントリーコンポーネントは、指定されたコンポーネントクラスを通じてコン​​ポーネントを読み込みます。 は主に 3 つのカテゴリに分類されます:

in @Ng<a href="http://www.php.cn/code/8212.html" target="_blank">Module</a>.bootstrap<br> で宣言された起動コンポーネント (AppComponent など)。

🎜🎜🎜ルーティング 🎜 構成 🎜🎜🎜🎜🎜を参照するコンポーネント コンポーネント タイプ 🎜🎜🎜🎜スタートアップ コンポーネント🎜🎜app.component.ts🎜
@NgModule({ declarations: [  AppComponent ], imports: [  BrowserModule,  BrowserAnimationsModule,  AppRoutingModule ], providers: [], entryComponents:[DialogComponent], declarations:[] bootstrap: [AppComponent] }) export class AppModule { }
🎜app.module .ts を使用してプログラム的にロードされるその他の動的コンポーネント🎜rrreee🎜bootstrapで宣言したAppComponentが起動コンポーネントです。 Index.html 内のコンポーネントの selector<app-root></app-root> の場所を使用しますが、Angular はこのセレクターに基づいて AppComponent を読み込みません。ここが誤解されやすいところです。 Index.html はどのコンポーネント テンプレートにも属していないため、Angular では、セレクターを使用する代わりに、ブートストラップで宣言された AppComponent タイプを使用して、プログラムでコンポーネントを読み込む必要があります。 🎜🎜Angular は AppComponent を動的にロードするため、すべての AppComponent はエントリー コンポーネントです。 🎜🎜🎜ルート設定によって参照されるコンポーネント🎜🎜rrreee🎜ルートを設定する必要があります🎜rrreee🎜Angularは、コンポーネントのセレクターを介してロードするのではなく、設定されたルートとルートで指定されたコンポーネントクラスに基づいてコンポーネントをロードします。 🎜🎜🎜🎜エントリコンポーネントの設定🎜🎜🎜🎜 Angularでは、エントリコンポーネントは@NgModule.entryComponentsで設定する必要があります。 🎜🎜起動コンポーネントとルーティング構成で参照されるコンポーネントは両方ともエントリ コンポーネントであるため、Angular はコンパイル中にこれら 2 つのコンポーネントを @NgModule.entryComponents に自動的に追加します。自分たちで作成した動的コンポーネントの場合は、手動で @NgModule.entryComponents に追加する必要があります。 🎜rrreee🎜この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。 🎜🎜推奨読書: 🎜🎜🎜JS でのダブルクリックとクリック イベント間の競合に対処する方法🎜🎜🎜🎜🎜 vue でカスタム コンポーネントを作成する方法🎜🎜🎜

以上がAngular エントリコンポーネントと宣言コンポーネントのケースの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。