ElementRef & TemplateRef & ViewContainerRef
ElementRef
ng은 크로스플랫폼이기 때문에 시각층과 렌더링층의 결합을 줄이고 ng이 멀티플랫폼에 더욱 적응하도록 하기 위해 ng은 우리를 도와 ElementRef를 봉인했다. 우리는 ElementRef를 통해native 요소를 얻을 수 있다(브라우저에서 흔히 말하는DOM 요소)
다음은 코드를 보도록 하겠습니다.
import { Component, ElementRef, AfterViewInit } from '@angular/core';
@Component ({
selector:'my-app',
template:`
Hello !
`
})
export class AppComponent(){
@ViewChild('greet') greetDiv: ElementRef
construcor(private elementRef: ElementRef, private renderer: Renderer) {
}
ngAfterViewInit() {
// 1: ,
this.renderer.setElementStyle(this.greetDiv.nativeElement, 'backgroundColor',red)
// 2:
this.greetDiv.nativeElement.backgroundColor='red'
}
}
TemplateRef && ViewContainerRef
template 자체는 HTML 탭으로 클라이언트의 내용 메커니즘을 저장하는 데 사용되며, 이 내용은 페이지를 렌더링할 때 불러오지 않지만, 실행할 때 자바스크립트에서 해석될 수 있습니다. 자세한 내용은 Template HTML Template Ref를 보십시오
// @angular/core/src/linker/template_ref.d.ts
// template , (EmbeddedViews)
export declare abstract class TemplateRef {
elementRef: ElementRef;
abstract createEmbeddedView(context: C): EmbeddedViewRef;
}
templateRef 아래에 추상적인 방법이 있는데 추상적인 클래스를 직접 실례화할 수 없습니다. 추상적인 클래스는 실례적인 추상화 클래스의 하위 클래스를 가지고 있어야 합니다. 모든 실례는createEmbeddedView 방법을 가지고 있습니다.
ViewContainerRef
import { Component, TemplateRef, ViewChild, ViewContainerRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'my-app',
template: `
Welcome to Angular World
I am span in template
`,
})
export class AppComponent {
name: string = 'Semlinker';
@ViewChild('tpl')
tplRef: TemplateRef;
@ViewChild('tpl', { read: ViewContainerRef })
tplVcRef: ViewContainerRef;
ngAfterViewInit() {
// console.dir(this.tplVcRef); (1)
this.tplVcRef.createEmbeddedView(this.tplRef);
}
}
TemplateRef: 내장된template 템플릿 요소를 나타내는 데 사용되며, TemplateRef 실례를 통해 내장된 보기 (Embedded Views) 를 쉽게 만들 수 있고, ElementRef를 통해 봉인된native Element에 쉽게 접근할 수 있습니다.주의해야 할 것은 구성 요소 보기에서template 템플릿 요소입니다. 렌더링을 거치면comment 요소로 바뀝니다.
ViewContainerRef: 뷰 컨테이너를 나타내는 데 사용되며 하나 이상의 뷰를 추가할 수 있습니다.ViewContainer Ref 인스턴스를 사용하여 TemplateRef 인스턴스를 기반으로 인라인 뷰를 작성하고 인라인 뷰의 삽입 위치를 지정하며 뷰 컨테이너에 있는 기존 뷰를 쉽게 관리할 수 있습니다.간단히 말해 ViewContainerRef의 주요 역할은 인라인 뷰나 어셈블리 뷰를 작성하고 관리하는 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.