2017-11-10 10 views
0

ng-template의 innerHTML을 구성 요소로 가져오고 싶습니다. 뭔가 당신은 단지 템플릿이 주입 될로 쉘을 요구하기 때문에ng-template innerHTML을 구성 요소로 가져 오는 방법

<my-comp [template]="myTemplate"></my-comp> 
<ng-template #myTemplate></ng-template> 

TS

export class MyComponent implements OnInit { 

    @Input() template: string | TemplateRef<any>; 

    ngOnInit(){ 
    console.log(this.template); 
    } 

} 
+0

learn about transclusion 단지 명확하게 : 예를 들어 당신이 원하는 HTML 제공 하위 구성 요소의 템플릿으로 사용할 상위 구성 요소가 필요합니까? – BeetleJuice

+0

예 .. (viewChild를 사용하여) 구성 요소 내부에있는 경우 템플릿을 가져올 수 있습니다. 템플릿이 컴포넌트의 일부가 아닌 경우 어떻게해야합니까 @BeetleJuice –

+0

외부에서 템플릿이 제공 될 때까지 컴포넌트 자체는 빈 쉘입니다. – BeetleJuice

답변

2

HTML

처럼 지침 대신 구성 요소를 사용하는 것이 좋습니다.

@Directive({ 
    selector: '[template-host]' 
}) 
export class HostDirective{ 

    @Input('template-host') set templateHtml(value){ 
    this.hostElement.innerHTML = value; 
    } 

    private hostElement:HTMLElement; 

    constructor(elementRef:ElementRef){ 
    this.hostElement = elementRef.nativeElement; 
    } 
} 

지금 당신은 어떤 요소에이 지침을 적용 할 수 있고, 그 요소에 HTML 주사의 원인이됩니다 바인딩 template-host를 제공했다.

<!-- The div will contain the html in myTemplate --> 
<div [template-host]="myTemplate"></div> 
클래스가 실제로 템플릿을 가지고 있지만, 그 템플릿의 일부에 HTML을 주입 할 경우

Live demo

+0

. 하지만 그 호스트 요소의 템플릿을 제공하지만, 내가 템플릿에서 원하는 –

+0

참조하십시오. 템플릿을 부모 구성 요소의 문자열 속성으로 저장하지 않는 이유는 무엇입니까? 상위 뷰에서 ng-template 내부에 있어야하는 이유는 무엇입니까? – BeetleJuice

+0

그래서 단순한 문자열을 의미합니까? –