問題

私の知る限り、アプリケーションのエントリポイントは1つだけです。以下のコードスニペットに示すように、アプリケーションのエントリポイントを決定するブートストラップキーに配列を渡しています。

 import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent, MyComboboxComponent, 
                    CollapsibleDirective, CustomCurrencyPipe],
  imports: [BrowserModule],
  providers: [UserService, LessonsService],
  bootstrap: [AppComponent]

})
export class AppModule {

}
 

P.S:Angular 2を学んでいますが、質問は愚かに聞こえるかもしれません:)

  ベストアンサー

必要に応じて多くのブートストラップコンポーネントを渡すことができます。あなたは単にいくつかの独立したコンポーネントツリーで終わるでしょう:

 bootstrap: [AComponent, BComponent]

        RootModuleInjector
                |
                |
       ApplicationRef.views
       /                   \
      /                     \
   AComponent              BComponent
 

また、複数のコンポーネントのブートストラップの意味は何ですか?

変更検出を実行すると、Angularは各ツリーの変更検出を個別に実行します。

 class ApplicationRef {
   tick(): void {
    ...
    try {
      this._runningTick = true;
      // here this._views.length equals to 2
      this._views.forEach((view) => view.detectChanges());
 

新しいルートコンポーネントを ApplicationRef に手動で追加することもできます。

 const componentRef = componentFactoryResolver.resolveComponentFactory(SomeComponent)
applicationRef.attachView(componentRef.hostView);

        RootModuleInjector
                |
                |
       ApplicationRef.views
       /        |           \
      /         |            \
AComponent  SomeComponent   BComponent
 

ルートコンポーネント間でデータを共有する必要がある場合は、RootModuleInjectorを作成するために使用されるルートモジュールのプロバイダを定義できます。

 @NgModule({
    providers: [ServiceSharedBetweenRootComponents]
}
export class AppModule {}
 

すべてのルートコンポーネントに注入することができます:

 export class AComponent {
    constructor(service: ServiceSharedBetweenRootComponents)
 

  同じタグがついた質問を見る

angular