2016-09-29 59 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