angular 動態生成元件如何插入html 片段(類似ng-content的功能)
1.需求:有一個alertComponent元件,需要動態生成(使用viewChild ,ViewContainerRef ,componentFactoryResolver)元件,但是需要投影一段html到alertCompoment裡面去。
問題分析:如果是使用標籤例項化,直接使用ng-content就可以投影對應的內容進去了,例如:
<alert-Compoment>
<div class="info">這裡的將會投影進alertComponent 對應的 <ng-content selecter=".info"></ng-content></div>
</alert-Compoment>
可是動態生成要怎麼解決呢?
思路分析:如果要你在執行的時候在元件上新增檢視或者建立元件,這個你是不是知道怎麼做
1.使用viewChild獲取要新增檢視的容器以及需要插入的template
2.使用viewContainerRef例項的createEmbeddedView方法建立檢視
3.如果建立元件,先用componentFactoryResolver例項化元件,然後再使用viewContainerRef例項的createComponent方法建立元件
---------------分割線----------------------
入正題,你想在動態生成的元件插入html片段,是不是隻要獲取到這個元件的引用,然後獲取元件內部的viewContainerRef例項的引用,然後就可以呼叫createEmbeddedView方法進行內容的插入,從而達到了投影的效果,程式碼如下:
//this.vc是元件即將要插入的容器viewContainerRef的例項
//this.cfr 是componentFactoryResolver的例項引用 alertComponent是動態生成的元件
//alertVc是alertComponent元件裡面的ng-container佔位符,用來放內容插入的
// this.template是要動態插入的html的應用
let alertComponent = this.vc.createComponent(this.cfr.resolveComponentFactory(alertComponent));
alertComponent.instance.alertVc.createEmbeddedView(this.template)
由於本人技術有限,如果有錯的地方還望各位留言指出錯誤,或者有更好的實現方式也歡迎留言指正