2016-09-08 3 views
1

이 내 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 제공을 명시 적으로 말했지만, 여전히 작동하지 않습니다. 나는 또한 이렇게 공유 모듈을 만들려고 시도했다 :

@NgModule({ 
    imports: [CommonModule], 
    exports: [CommonModule,RouterModule,LoaderComponent], 
    providers: [ AccountValues,PopupManager,Preferences,TimeFormatter,UserDataProvider], 
    declarations:[LoaderComponent] 
}) 
export class SharedModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: SharedModule, 
    }; 
    } 
} 

나는 여전히 같은 오류가 발생한다. 이 버그는 부트 스트랩 된 구성 요소에 어떤 제공자도 주입 할 수없는 버그라고 생각합니다. 공급자를 만들 수 있기 전에 RootComponent가 만들어 졌다는 것을 의미합니다. 그래서, 버그가 아니라면 어디에서 잘못 될 수 있습니까?

저는 Angular2의 rc6을 사용하고 있습니다.

답변

1

나는() SharedModule의 아래 그림과 같이 당신이 정적 forRoot 내/아래 제공를 사용한다고 생각합니다. 문제가 해결되기를 바랍니다.

@NgModule({ 
    imports:  [ CommonModule,.. ], 
    declarations: [LoaderComponent], 
    exports:  [ CommonModule,... ] 
}) 
export class SharedModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: SharedModule, 
     providers: [ ...,PopupManager,...] //<-----declare providers here 
    }; 
    } 
} 
+0

나는 이미 공유 모듈의 첫 번째 버전을 보았습니다. – Adit

+0

좋습니다. 그런 다음'appModule'에서'provider'를 제거해야합니다. 그리고'RootComponent'에서'PopupManager'를 가져와야합니다. – micronyks

+0

나를 위해 PopupManager에는 단 하나의 인스턴스 만 있고, 여러 인스턴스가있는 결과가 나옵니다. 무엇보다도, 나는 처음부터 app.module에 공급자를 배치해서는 안되었습니다. PopupManage를 어떻게 든 제공하기위한 필사적 인 시도였습니다. 공유 모듈을 가져 오는 것만으로도 RootComponent가 아닌 다른 구성 요소에 PopupManager를 제공 할 수 있습니다. – Adit

관련 문제