2017-12-24 8 views
0

를 기존 HTML을 생성 :컴파일 동적 나는 DOM에 다음 HTML 삽입하는 제 3 자 라이브러리가있는, 구성 요소가 구성 요소

<input (click)="doSomething()"/>{{someText}}

doSomething 내 구성 요소의 기능이, 그리고 {{someText}}은 속성입니다.

이 문자열을 기존 구성 요소로 컴파일하는 방법을 알아 내려고 ComponentFactoryResolver으로 새 문자열을 만들지 않으려 고합니다.

동적 HTML을 추가하고 ChangeDetectorRef.detectChanges() 또는 NgZone.run(callback) 또는 ApplicationRef.tick()을 사용하려고했습니다. 이들 중 어느 것도 HTML을 컴파일하지 않았습니다.

아이디어가 있으십니까?

+0

. 프로덕션에서 앵귤러 애플리케이션은 AOT 컴파일러로 컴파일됩니다 (또는 적어도 컴파일되어야 함). 더 빠르게 작업을 수행하고 애플리케이션과 함께 각도 컴파일러를 제공하지 않아도되므로 작아집니다. 따라서 런타임에 컴파일하는 것은 더 이상 가능하지 않습니다. 물론 그렇게하지 않기로 결정할 수도 있지만 프레임 워크와 모범 사례에 맞서 싸울 것입니다. –

답변

0

무엇 ViewContainerRef.createEmbeddedView 사용에 대한 :

템플릿 :

<!-- location in your component template to add the dynamic template --> 
<ng-container #ref></ng-container> 

... 

<!-- dynamic template definition --> 
<ng-template #tpl> 
    <input (click)="doSomething()"/>{{someText}} 
</ng-template> 

구성 요소 클래스 :

당신은 정말 당신의 전략을 변경해야
someText: string; 

@ViewChild('ref') 
vcr: ViewContainerRef; 

@ViewChild('tpl') 
tpl: TemplateRef; 

ngOnInit() { 

    myLib.onSomeEvent(() => { 
    this.vcr.createEmbeddedView(this.tpl); 
    }) 
} 

doSomething() { 
    ... 
}