IT

Angular에서 뷰 공급자란 무엇입니까?b/w 제공업체와 view 제공업체의 차이점은 무엇입니까?

itgroup 2023. 8. 1. 20:28
반응형

Angular에서 뷰 공급자란 무엇입니까?b/w 제공업체와 view 제공업체의 차이점은 무엇입니까?

아래 코드에서 viewProviders란 무엇입니까?공급업체와 어떻게 다릅니까?

class Greeter {
   greet(name:string) {
     return 'Hello ' + name + '!';
   }
}    
@Component({
  selector: 'greet',
  viewProviders: [
    Greeter
  ],
  template: `<needs-greeter></needs-greeter>`    
})
class HelloWorld {
}

에서는 HelloWorld의"HelloWorld"와 "viewProviders"를 사용하지 와 "" .<ng-content> 경우는하영용 안에서 .<ng-content>...</ng-content>그러면 당신이 사용하고 있기 때문에 투영된 내용에 그리터를 주입할 수 없습니다.

viewProviders: [Greeter] 

Greeter가 잠재적으로 투영된 콘텐츠에 주입되기를 원한다면,

providers: [Greeter]

그렇게viewProviders콘텐츠 , 프로젝션 콘텐츠는 프로젝션 콘텐츠가 아닙니다.providers모든 하위 항목에서 공급자를 사용할 수 있습니다.은 그가치입니다.viewProviders에서는 라이브러리에서 특히 유용할 수 있는 예상 콘텐츠가 서비스를 방해하는 것을 방지할 수 있습니다.

  1. 하나의 서비스 인스턴스를 전체 애플리케이션에서 공유하려면 NgModule의 공급자에서 구성합니다.
  2. 구성 요소당 하나의 서비스 인스턴스를 가지고 모든 구성 요소의 자식과 공유하려면 구성 요소 장식기의 공급자 속성에 이 인스턴스를 구성합니다.자식은 자식 보기입니다.
  3. 구성 요소당 하나의 서비스 인스턴스를 가지고 구성 요소의 컨텐츠 하위가 아닌 구성 요소의 뷰 하위만 공유하려면 구성 요소 장식자의 viewProviders 속성에서 이 인스턴스를 구성합니다.

서비스 인스턴스 하나를 전체 애플리케이션에서 공유 -> 루트 모듈 공급자에서 구성 [AppModule]

서비스 인스턴스 하나를 전체 모듈에서 공유 -> 해당 모듈의 공급자에서 구성

서비스 인스턴스 하나를 전체 구성요소에 걸쳐 공유 -> 해당 구성요소의 공급자에서 구성

서비스 인스턴스 하나를 구성 요소 간에 공유 [ContentChildren이 아닌 ViewChildren만 표시] -> view에서 구성해당 구성 요소의 공급자

필요한 서비스 범위에 따라 다릅니다.

  • 모듈 전체 단일 서비스 인스턴스: 사용providers:[Service]@NgModuledecorator에서
  • 구성 요소 전체 단일 서비스 인스턴스: 사용providers:[Service]@구성요소 장식기에 있습니다.이 서비스 인스턴스는 해당 구성 요소의 ContentChildren ViewChildren 모두와 공유됩니다.

콘텐츠 하위:컨텐츠-프로젝션을 사용하여 구성요소에 투영되는 하위 구성요소입니다.<ng-content></ng-content>

하위 항목 보기:구성 요소의 템플릿 내부에 정의되어 있지만 투영되지 않은 하위 구성 요소입니다.

  • ContentChildren을 제외한 구성요소 전체 단일 서비스 인스턴스: 사용viewProviders: [Service]@구성요소 장식기에서

약간 주제가 다르지만, @NgModule에서 제공되는 서비스는 애플리케이션의 전체 범위에서 사용할 수 있는 싱글톤이라는 답변을 수정하고 싶습니다.당신은 그것이 사실이 아닌 경우에 부딪힐 수 있습니다.

서비스는 모듈에서 제공되는 것이 아니라 인젝터에서 제공됩니다.Angular의 맨 위 레벨에는 Null 인젝터가 있고 그 아래에는 Platform Injector가 있고 그 아래에는 Root Injector가 있습니다.플랫폼 및 루트는 모듈 인젝터입니다.모듈에서 제공되는 날씨 서비스는 루트 인젝터에 있으며 모듈이 열심히 로드되는지 여부에 따라 달라집니다.열심히 로드된 모듈에서 제공되는 서비스는 루트 인젝터에 생성되므로, 이러한 경우 @NgModule에서 서비스를 제공하면 루트 인젝터에서 서비스가 싱글톤이 됩니다.그러나 로드가 느린 모듈의 경우 각도는 더 많은 모듈 인젝터(로드가 느린 모듈마다 인젝터 1개)를 생성하며, 이는 문서의 루트 인젝터보다 낮습니다.이 경우 @NgModule에서 서비스를 제공하면 응용 프로그램의 전체 범위에서 사용할 수 있는 싱글톤 서비스가 아니라 로드가 느린 모듈의 자녀가 사용할 수 있는 서비스가 제공됩니다.

(angular 6+의 경우) 이러한 생각을 피하기 위해 전체 앱에 대해 싱글톤을 원하는 경우 각을 구분하고 루트 인젝터의 서비스 클래스 자체에 서비스를 추가할 수 있습니다.

@Injectable({
   provideIn: 'root'
})
class MyService...

이렇게 하면 Angular의 루트 인젝터에서 서비스를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/35888434/what-are-viewproviders-in-angular-and-what-is-the-difference-b-w-providers-vs-v

반응형