각도 6 의존성 주입
Angular 6의 최신 릴리스에서 서비스는 providedIn
서비스 메타 데이터 의 속성을 사용하여 모듈에 등록됩니다 .
@Injectable({
providedIn: 'root',
})
export class HeroService {}
그러나 설명서 providers
는 Angular 5에서했던 것처럼 모듈 메타 데이터 의 모듈 배열에 서비스를 등록하는 방법도 참조합니다 .
@NgModule({
providers: [HeroService],
})
export class AppModule {}
그래서,
- 인젝터가 주입해야하는 서비스를 인식하도록하려면 어떤 방법을 사용해야합니까?
- 모듈
providers
배열 방법이 더 이상 사용되지 않습니까?
기본적으로 둘 중 하나를 사용할 수 있지만 새 CLI에 따라 provideIn
생성하는 동안 자동으로 추가됩니다.service
제공됨
이제
@Injectable()
새로운 providedIn 속성을 사용하여 데코레이터 내부에서 직접 제공자를 등록하는 새롭고 권장되는 방법이 있습니다.'root'
응용 프로그램의 값 또는 모듈로 허용 합니다. 를 사용하면'root'
인젝터 블이 애플리케이션에서 싱글 톤으로 등록되며 루트 모듈의 공급자에 추가 할 필요가 없습니다. 마찬가지로를 사용providedIn: UsersModule
하면 인젝터 블이UsersModule
모듈의 공급자에 추가하지 않고 의 공급자로 등록됩니다 .이 새로운 방식은 애플리케이션에서 더 나은 트리 쉐이킹을 갖도록 도입되었습니다. 현재 모듈 제공 업체에 추가 된 서비스는 애플리케이션에서 사용되지 않더라도 최종 번들에 포함됩니다. 이는 조금 슬픈 일입니다.
자세한 내용은 여기를 참조하십시오.
- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-6/
- https://angular.io/guide/dependency-injection#injectable-ngmodule-or-component
항상 그렇듯이 여러 솔루션을 사용할 수있는 경우 달성하려는 목표에 따라 다릅니다. 그러나 문서 는 선택할 지침을 제공합니다.
애플리케이션 루트 인젝터에서 항상 서비스를 제공하는 것이 바람직하지 않은 경우가 있습니다. 사용자는 서비스 사용을 명시 적으로 선택해야하거나 느리게로드되는 컨텍스트에서 서비스를 제공해야합니다. 이 경우 공급자는 특정에 연결되어야
@NgModule class
하며 해당 모듈을 포함하는 인젝터에서 사용됩니다.
따라서 기본적으로 providedIn: 'root'
응용 프로그램 전체의 모든 서비스에 사용할 것 입니다. 다른 서비스의 경우 이전 버전을 계속 사용하십시오.
이미 서비스를 다르게 제공 할 수있는 선택권이 있다는 것을 잊지 마십시오. 예를 들어 구성 요소 수준에서 Injectable을 선언 할 수도 있습니다 (V6에서는 변경되지 않음).
@Component({
selector: 'app-my-component',
templateUrl: './my.component.html',
providers: [ MyService ]
})
이렇게하면 서비스는 MyComponent
및 해당 하위 구성 요소 트리 에서만 사용할 수 있습니다 .
Angular 5+ 개발자를 사용하는 경우 providedIn : 'root'로 선언되면 자동으로 주입 가능한 서비스를 생성합니다.이 경우 app.module.ts에서 서비스를 가져올 필요가 없습니다. 다른 구성 요소에서 직접 사용할 수 있습니다.
@NgModule()
와 @Component()
장식은 NgModule 수준 또는 구성 요소 수준 인젝터에 대한 공급자를 구성 할 수있는 공급자의 메타 데이터 옵션을 가지고있다.
@Injectable () 데코레이터에는 providedIn 메타 데이터 옵션이 있으며, 여기에서 루트 인젝터 또는 특정 NgModule의 인젝터를 사용하여 데코 레이팅 된 서비스 클래스의 제공자를 지정할 수 있습니다.
귀하의 경우에는 "루트"수준에서 제공되었으므로 모듈의 공급자로 다시 추가 할 필요가 없습니다.
참조 URL : https://stackoverflow.com/questions/50208642/angular-6-dependency-injection
'programing' 카테고리의 다른 글
일괄 처리를 위해 Spark / Flink에 비해 Apache Beam의 이점은 무엇인가요? (0) | 2020.12.25 |
---|---|
상속과 함께 Swift 4에서 Decodable 사용 (0) | 2020.12.25 |
컴파일 오류 : 인터페이스를 명시 적으로 구현하는 동안 "수정 자 'public'이이 항목에 유효하지 않습니다." (0) | 2020.12.25 |
@Column JPA 어노테이션에 설정된 경우 길이 속성은 무엇을합니까? (0) | 2020.12.25 |
Android의 9 패치 이미지 오류 (0) | 2020.12.25 |