私の問題は、Angularモジュールの1つがSafariブラウザで正しく動作しないことです。モジュールをインポートするか、条件付きでサービスを提供するにはどうすればよいですか? (AOT)
私は、次のコードしている:あなたは、私は条件付きでモジュールをインポートする見ることができるように
@NgModule({
bootstrap: [ AppComponent ],
imports: [
BrowserAnimationsModule,
BrowserModule.withServerTransition({
appId: 'app'
}),
AppModule,
'navigator' in window && 'serviceWorker' in navigator ? ServiceWorkerModule.register('./ngsw-worker.js') : ServiceWorkerModuleMock
]
})
を。 JITコンパイルを使用しているとき、このメカニズムはうまくいきます。残念ながら、それはAOTと一緒に働いていません - ServiceWorkerModuleMock
は条件に関係なくインポートされます。
@NgModule({
entryComponents: [ AppComponent ],
imports: [
BrowserAnimationsModule,
BrowserModule.withServerTransition({
appId: 'app'
}),
AppModule,
ServiceWorkerModule.register('./ngsw-worker.js')
]
})
export class BrowserAppModule {
constructor(private injector: Injector) {}
public ngDoBootstrap(appRef: ApplicationRef): void {
// console.log('navigator' in window && 'serviceWorker' in navigator);
appRef.bootstrap(AppComponent);
}
}
しかし、これまでのところ、私はモジュールがここ@NgModule注釈にインポート変更することができますかわからない:私はngDoBootstrap
方法で少しを再生しようとしたソリューションとして
。どのクラスのどのメソッドを使うべきですか?
Injector
で指定されたサービスのインスタンスを変更することは可能でしょうか?その解決策も私を満足させるでしょう。
[このリンク(https://github.com/rangle/angular-2-aot-sandbox#func-in-providers-top)は、関心のものであってもよいです。これは、Rangle.ioチームが文書化したAOT制限の編集です – BeetleJuice
try条件import.push(serviceWorker) – Whisher