これは私のapp.moduleがどのように見えるかです:ブートストラップコンポーネントなしプロバイダ
@NgModule({
imports:[BrowserModule,HttpModule,SharedModule.forRoot(),NavigationBarModule,routing,JsonpModule],
declarations: [RootComponent],
providers:[PopupManager],
bootstrap: [RootComponent]
})
export class AppModule { }
これは私の共有モジュールがどのように見えるかです:
@NgModule({
imports: [CommonModule],
exports: [CommonModule,RouterModule,LoaderComponent],
declarations:[LoaderComponent]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ AccountValues,PopupManager,Preferences,TimeFormatter,UserDataProvider],
};
}
}
これは私がPopUpManagerがどのように見えるかです:
@Injectable()
export class PopupManager{
private activePopUpComp: HasAPopUp;
constructor(){
console.log("PopupManager created");
}
}
これは私のRootComponentの外観です。
@Component({
selector : 'root',
templateUrl : 'Content/Angular2/Development/partials/root.html',
styleUrls:['Content/Angular2/Development/css/CommonStyle.css']
})
export class RootComponent{
constructor(private popUpManager:PopupManager){
}
handleClick():void{
this.popUpManager.setActivePopUpComponent(undefined);
}
}
PopupManagerは共有モジュールによって提供されていますが、何らかの理由でこのコードを実行すると、PopupManagerのプロバイダがありません。 PopupManagerを明示的に指定したとしても、それはまだ機能しません。私はまた、このように私の共有モジュールを作成しようとしました:
まだ同じエラーが発生します。これはバグだと思う。ブートストラップされたコンポーネントには、どのプロバイダも注入できないバグだと思う。つまり、プロバイダを作成する前にRootComponentが作成されているということです。だから、もしバグではないなら、私は間違ってどこへ行くことができますか?
私は角度2のrc6を使用しています。
私は既にこれを試しました。共有モジュールの最初のバージョンを参照してください。 – Adit
次に、 'appModule'から' providers'を削除しなければなりません。また、 'RootComponent'で' PopupManager'をインポートするようにしてください。 – micronyks
私の場合、PopupManagerはただ1つのインスタンスしか持たないでしょう。あなたが提案しているのは、複数のインスタンスを持つことになります。まず第一に、app.moduleにプロバイダーを置くべきではありません。ポップアップマネージメントを何とかしてもらうための絶望的な試みでした。共有モジュールをインポートするだけで、PopupManagerを他のコンポーネントに提供するのに役立ちますが、RootComponentは提供しません。 – Adit