2016-09-29 57 views
2

我根據我的一些工作在這裏所描述的同樣的問題:遞歸動態模板編譯

動態模板編譯動態組件與角2.0

How can I use/create dynamic template to compile dynamic Component with Angular 2.0?

工作plunker在上面的問題中描述的可以找到here

如果動態細節嘗試創建另一個在模板中使用動態細節的動態視圖,則會出現此問題。如果我嘗試這樣做,我得到下面的異常:

「動態細節」不是一個已知的元素: 1.如果「動態細節」是角狀的部件,然後驗證它的一部分這個模塊。

這很容易通過更改plunker中的邏輯來創建一個動態模板來輸出「<dynamic-detail></dynamic-detail>」。

在文件 「應用程序/動態/ template.builder.ts」 我已經改變了下面的代碼:

 let editorName = useTextarea 
    ? "text-editor" 
    : "string-editor"; 

 let editorName = useTextarea 
    ? "dynamic-detail" 
    : "string-editor"; 

當發生這種情況我碰到上面的例外。顯然,編譯器在遞歸完成時不熟悉動態細節。

我試圖添加DynamicDetail導入不同模塊沒有任何運氣。也許這不是解決方案的一部分。

回答

2

如果你改變"text-editor""dynamic-detail"那麼你的模板將是這樣的:

<form> 
    <dynamic-detail 
    [propertyName]="'code'" 
    [entity]="entity" 
    ></dynamic-detail> 
    <dynamic-detail 
     [propertyName]="'description'" 
     [entity]="entity" 
    ></dynamic-detail> 
</form> 

DynamicDetail組件沒有propertyNameentity性能。 所以你可以添加他們的。

detail.view.ts

export class DynamicDetail implements AfterViewInit, OnChanges, OnDestroy, OnInit 
{ 
    @Input() public propertyName: string; 
    @Input() public entity: any; 
的溶液

第二部分是將該組件添加到RuntimeComponentModule

type.builder.ts

protected createComponentModule (componentType: any) { 
    @NgModule({ 
    imports: [ 
     PartsModule, 
     DynamicModule.forRoot() // this line 
    ], 
    declarations: [ 
     componentType 
    ], 
    }) 
    class RuntimeComponentModule {} 

    return RuntimeComponentModule; 
} 

它之後應該工作Plunker Example

+0

謝謝!這實際上很好地工作!然而,下一個會議很快就來臨了。現在我想在其中一個部分中呈現動態細節。然後我得到和以前一樣的錯誤。如果我做dynamicDetail作爲forwardRef parts.module我會得到一個堆棧溢出異常。如果我在partsModule中導入DynamicModule.forRoot(),我得到一個'未定義的異常'...我怎樣才能讓我的任何部分呈現動態細節呢? –

+0

http://plnkr.co/edit/UYnQHF?p=preview看看'parts.module.ts'和'dynamic。module.ts'但是,如果您將在動態組件中設置相同的模板,您將獲得循環調用 – yurzui