ホームページ >ウェブフロントエンド >jsチュートリアル >エントリーコンポーネントの使い方

エントリーコンポーネントの使い方

php中世界最好的语言
php中世界最好的语言オリジナル
2018-06-09 11:01:462339ブラウズ

今回は、エントリーコンポーネントの使い方と、エントリーコンポーネントを使用する際の注意点について説明します。以下は実際の事例ですので、見ていきましょう。

前書き

コンポーネントは 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)

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

主要分为三类:

  • @NgModule.bootstrap里声明的启动组件,如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 つのカテゴリに分類されます:

@NgModule.bootstrap で宣言されたスタートアップ コンポーネント (AppComponent など)。

🎜🎜ルーティング設定で参照されるコンポーネント🎜🎜🎜🎜コンポーネントタイプを使用してプログラム的にロードされるその他の動的コンポーネント🎜🎜🎜🎜スタートアップコンポーネント🎜🎜app.component.ts🎜
@NgModule({ declarations: [  AppComponent ], imports: [  BrowserModule,  BrowserAnimationsModule,  AppRoutingModule ], providers: [], entryComponents:[DialogComponent], declarations:[] bootstrap: [AppComponent] }) export class AppModule { }
🎜app.module.ts🎜rrreee🎜 bootsで宣言された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 サイトの他の関連記事に注目してください。 🎜🎜推奨読書: 🎜🎜🎜ユーザー検証用のノード+トークン🎜🎜🎜🎜🎜Angular プロジェクトで scss を使用する方法🎜🎜🎜

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

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