내 문제는 Angular 모듈 중 하나가 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
은 상태에 관계없이 가져올 수 있습니다. 솔루션으로
ngDoBootstrap
방법으로 조금 재생을 시도했다 :
이
@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 주석에 수입 된 모듈을 변경하는 방법을 모르겠어요. 어느 클래스의 어떤 메소드를 사용해야합니까?
아마도 Injector
에서 주어진 서비스의 인스턴스를 변경할 수 있습니까? 그 해결책은 또한 나를 만족시킬 것입니다.
[이 링크] (https://github.com/rangle/angular-2-aot-sandbox#func-in-providers-top)가 도움이 될 수 있습니다. 그것은 Rangle.io 팀이 문서화 한 AOT 한계의 컴파일입니다 – BeetleJuice
시도하십시오 조건 import.push (serviceWorker) const imports = [기본 모듈] – Whisher