Angular CLI에서 서비스를 생성 할 때 인젝터 블 데코레이터의 기본 값이 'root'인 'provided in'특성을 가진 메타 데이터가 추가됩니다.
@Injectable({
providedIn: 'root',
})
정확히 무엇을 제공합니까? 이것이 전체 응용 프로그램에 대해 '전역'유형의 싱글 톤 서비스처럼 서비스를 제공한다고 가정하고 있지만 AppModule의 공급자 배열에서 이러한 서비스를 선언하는 것이 더 깨끗하지 않습니까?
최신 정보:
다른 사람을 위해, 다음 단락은 특히 기능 모듈에만 서비스를 제공하려는 경우 이에 대한 또 다른 좋은 설명을 제공했습니다.
이제
@Injectable()
새providedIn
속성을 사용하여 데코레이터 내부에 공급자를 등록하는 새로운 권장 방법이 있습니다.'root'
응용 프로그램의 값 또는 모듈로 허용 됩니다. 당신이 사용하는 경우'root'
, 당신은injectable
응용 프로그램에서 싱글로 등록됩니다, 당신은 루트 모듈의 공급 업체에 추가 할 필요가 없습니다. 당신이 사용하는 경우 마찬가지로,providedIn: UsersModule
의는injectable
의 공급자로 등록되어UsersModule
받는 사람을 추가하지 않고providers
모듈의 "-. https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
업데이트 2 :
추가 조사 후, 나는 그것을 가지고있는 것이 유용하다고 결정했습니다 providedIn: 'root'
provide
루트 모듈 이외의 다른 모듈에서 서비스 를 원한다면 providers
피처 모듈 데코레이터에서 배열을 사용하는 것이 좋습니다 . 그렇지 않으면 순환 종속성에 시달립니다. 흥미로운 토론이 여기에 있습니다-https: //github.com/angular/angular-cli/issues/10170