1. 程式人生 > >angular 動態生成元件如何插入html 片段(類似ng-content的功能)

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)

由於本人技術有限,如果有錯的地方還望各位留言指出錯誤,或者有更好的實現方式也歡迎留言指正