2016-01-14 70 views
1

我有一個主類,模塊,它是由許多子類如TextOnlyModule或ImageOnlyModule擴展。我有一個包含模塊數組的預覽組件。如何渲染角度2中的子類組件?

這裏有一個小圖:

enter image description here

我想,在預覽模板,以呈現其子類模板的每個模塊。在下面的例子中,模塊是一個模塊數組,我喜歡用某個模板呈現每個模塊,而不直接調用每個選擇器,因爲我不知道Module子類型。

<div *NgFor="#module in modules"> 
    {{module}} 
</div> 

有沒有辦法做到這一點?

謝謝。

回答

1

也許你可以使用DynamicComponentLoader類做編程的Preview組件內:

@Component({ 
    (...) 
    template: ` 
    <div #someContainer></div> 
    ` 
}) 
export class Preview { 
    constructor(dcl:DynamicComponentLoader,eltRef:ElementRef) { 
    this.modules = ... 

    this.modules.forEach((module) => { 
     dcl.loadIntoLocation(module, eltRef, 'someContainer'); 
    }); 
    } 
} 

下面是一些plunkr:https://plnkr.co/edit/UtVpvnTHPiR675lztOcQ?p=preview

希望它可以幫助你, 蒂埃裏

+0

我目前使用的角度2.0.0 beta.0而據我可以看到,有上渲染沒有loadIntoLocation方法。 看來setElementProperty是最接近的一個。 我試圖用這樣的: this.modules.forEach((模塊)=> { renderer.setElementProperty(eltRef, 「元素」,模塊); })與我的模板:

但它似乎根本不工作 –

+0

哦,你是對的。我犯了一個錯誤:它是'Renderer'類,但是'DynamicComponentLoader'一個...我更新了我的答案;-)對不起! –

+0

再次感謝您的幫助Thierry。我遇到另一個困難。這可能'loadIntoLocation'與一個instancied對象,而不是它的'Type'?我無法在api文檔中找到它 –