programing

각도 6 의존성 주입

nasanasas 2020. 12. 25. 10:06
반응형

각도 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모듈의 공급자에 추가하지 않고 의 공급자로 등록됩니다 .

이 새로운 방식은 애플리케이션에서 더 나은 트리 쉐이킹을 갖도록 도입되었습니다. 현재 모듈 제공 업체에 추가 된 서비스는 애플리케이션에서 사용되지 않더라도 최종 번들에 포함됩니다. 이는 조금 슬픈 일입니다.

자세한 내용은 여기를 참조하십시오.


항상 그렇듯이 여러 솔루션을 사용할 수있는 경우 달성하려는 목표에 따라 다릅니다. 그러나 문서 는 선택할 지침을 제공합니다.

애플리케이션 루트 인젝터에서 항상 서비스를 제공하는 것이 바람직하지 않은 경우가 있습니다. 사용자는 서비스 사용을 명시 적으로 선택해야하거나 느리게로드되는 컨텍스트에서 서비스를 제공해야합니다. 이 경우 공급자는 특정에 연결되어야 @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

반응형