2017-11-10 4 views
0

ng-bootstrap을 포함한 대부분의 각도 2+ 라이브러리는 가져와야하는 모듈을 제공합니다. 때로는 그들은 forRoot() 방법을 사용하고 때로는 그렇지 않습니다.forRoot가 있거나없는 모듈 가져 오기

최근 내 응용 프로그램의 서브 모듈에 NgbDatepickerModule을 가져 오기하여 발생하는 버그로 어려움을 겪고 있습니다. NgbDatepickerModule.forRoot() ...을 제거하고 forRoot을 제거하면 문제가 해결됩니다.

응용 프로그램의 진입 점인 모듈을 가져올 때 forRoot 메서드를 호출해야하며 BrowserModule도 있어야한다고 생각하십니까? 하지만 나중에 모듈을 서브 모듈로 가져올 수 있습니다. forRoot 호출없이 수행해야합니다.

왜? forRoot을 통해 모듈을 만들 때 모듈 생성의 차이점은 무엇입니까?

답변

2

.forFoot() 메서드는 모듈 개발자가 수동으로 만들고 기본 모듈 가져 오기에서 한 번만 사용해야합니다. 이 방법은 ModuleWithProviders을 반환하도록되어 무엇이다 :

export interface ModuleWithProviders { 
    ngModule: Type<any>; 
    providers?: Provider[]; 
} 

당신이이 방법을 보이는 NgbDatepickerModule의 경우에서 볼 수 있습니다 : 당신이 서브 모듈도이 방법을 사용

export class NgbDatepickerModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: NgbDatepickerModule, 
     providers: [ 
     {provide: NgbCalendar, useClass: NgbCalendarGregorian}, 
     {provide: NgbDatepickerI18n, useClass: NgbDatepickerI18nDefault}, 
     {provide: NgbDateParserFormatter, useClass: NgbDateISOParserFormatter}, NgbDatepickerConfig 
     ] 
    }; 
    } 
} 

, 다음 사람들을 공급자가 새로운 인스턴스에 의해 재정의 된 경우 예기치 않은 동작이 발생할 수 있습니다.