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
에서는 라이브러리에서 특히 유용할 수 있는 예상 콘텐츠가 서비스를 방해하는 것을 방지할 수 있습니다.
- 하나의 서비스 인스턴스를 전체 애플리케이션에서 공유하려면 NgModule의 공급자에서 구성합니다.
- 구성 요소당 하나의 서비스 인스턴스를 가지고 모든 구성 요소의 자식과 공유하려면 구성 요소 장식기의 공급자 속성에 이 인스턴스를 구성합니다.자식은 자식 보기입니다.
- 구성 요소당 하나의 서비스 인스턴스를 가지고 구성 요소의 컨텐츠 하위가 아닌 구성 요소의 뷰 하위만 공유하려면 구성 요소 장식자의 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
'IT' 카테고리의 다른 글
PHP: 단어로 된 숫자 표현 (0) | 2023.08.06 |
---|---|
정의된 간격으로 Android에서 실행 가능한 스레드를 실행하는 방법은 무엇입니까? (0) | 2023.08.06 |
Spring Webflux에서 JDBC 호출 차단 실행 (0) | 2023.08.01 |
Oracle SQL 개발자 색상 코딩 (0) | 2023.08.01 |
JNI를 통해 Java의 바이트[]를 C의 함수에 전달: jarraybyte 사용 방법 (0) | 2023.08.01 |