2016-10-14 2 views
4
에 NgModule 구성을 변경하는 방법

자신의 서비스 구성을 노출 일부 모듈은 예를 들어, 다음과 같습니다런타임

  • AngularFireModule.initializeApp(firebaseConfig),
  • StoreModule.provideStore(reducer),
  • RouterModule.forRoot(routes) ...

방법 런타임에 이들 중 하나를 재구성합니까? 예를 들어, 사용자는 두 개의 링크 중 하나를 선택하고 다른 모듈은 느리게로드되고 다르게 구성됩니다.이 새로운 NgModule로 데이터를 전달하려면 어떻게해야합니까?

내가 전역에 뭔가를 넣고 거기에서 읽을 것입니다 생각할 수있는 모든

,하지만 ...이 느낌이 좋지 않습니다 :) 인젝터가 생성 된 후

답변

2

제공자는 수정할 수 없습니다.

상태에 따라 다른 인스턴스를 제공하는 서비스를 만들 수 있습니다.

@Injectable() 
class ProviderService { 
    constructor(injector:Injector) {} 

    set firebaseConfig(firebaseConfig) { 
    let resolvedProviders = ReflectiveInjector.resolve([AngularFireModule.initializeApp(firebaseConfig)]); 
    this.childInjector = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);  
    } 

    get firebase():AngularFireModule { 
    return this.childInjector.get(AngularFireModule); 
    } 
} 

후 나는이 완벽하다고 생각

class MyComponentOrService { 
    constructor(provider:ProviderService) {} 

    changeFirebase() { 
    this.provider.firebaseConfig = ...; 
    this.fb = this.provider.firebase; 
    } 

    doSomething() { 
    this.fb.xxx(); 
    } 
} 
+0

처럼 사용! 매우 냉정하게, 당신은 내 하루를 보냈습니다 : P 분명히하는 몇 가지 사항들 :'이게 .childInjector = ... '는 어디에서 왔습니까? 그리고'AngularFireModule.initializeApp (this.firebaseConfig)]'단지 * firebaseConfig *, 인수 여야합니까? 나는 내가 재구성하고자하는 모든 서비스에 이것을 써야만 할 것이다. (어쨌든 나는 많은 것을 가질 것으로 기대하지는 않지만)? – Sasxa

+0

실수를 지적 해 주셔서 감사합니다. StackOverflow 편집기에서 구문 강조 표시가 누락되었습니다 ;-) 코드를 업데이트했습니다. –

+0

게으른로드 된 모듈의'prodivers : [ProviderService]'에 이것을 넣어야합니까? 게이머는 게으른로드 모듈에 대해이 공급자를 처분합니까? 정리를해야합니까 (그렇다면 어떻게해야합니까)? – Sasxa