angular2中的递归动态模板编译
recursive dynamic template compilation in angular2
我的一些工作基于此处描述的相同问题:
使用Angular 2.0
编译动态组件的动态模板
可以找到上述问题中描述的工作 plunker here。
如果 dynamic-detail 尝试创建另一个在模板中使用 dynamic-detail 的动态视图,则会出现此问题。如果我尝试这样做,我会得到以下异常。:
'dynamic-detail' 不是已知元素:
1. 如果'dynamic-detail'是一个Angular组件,那么验证它是这个模块的一部分。
这很容易通过更改 plunker 中的逻辑来创建一个输出“<dynamic-detail></dynamic-detail>
”的动态模板来重现。
在文件“app/dynamic/template.builder.ts”中,我更改了以下代码:
let editorName = useTextarea
? "text-editor"
: "string-editor";
到
let editorName = useTextarea
? "dynamic-detail"
: "string-editor";
发生这种情况时,我 运行 进入上述异常。显然,编译器在递归完成时不熟悉动态细节。
我曾尝试将 DynamicDetail 添加到不同模块中的导入,但没有成功。也许这不是解决方案的一部分。
如果您将 "text-editor"
更改为 "dynamic-detail"
,那么您的模板将如下所示:
<form>
<dynamic-detail
[propertyName]="'code'"
[entity]="entity"
></dynamic-detail>
<dynamic-detail
[propertyName]="'description'"
[entity]="entity"
></dynamic-detail>
</form>
DynamicDetail
组件没有 propertyName
和 entity
属性。
所以你可以添加他们的。
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
我的一些工作基于此处描述的相同问题:
使用Angular 2.0
编译动态组件的动态模板可以找到上述问题中描述的工作 plunker here。
如果 dynamic-detail 尝试创建另一个在模板中使用 dynamic-detail 的动态视图,则会出现此问题。如果我尝试这样做,我会得到以下异常。:
'dynamic-detail' 不是已知元素: 1. 如果'dynamic-detail'是一个Angular组件,那么验证它是这个模块的一部分。
这很容易通过更改 plunker 中的逻辑来创建一个输出“<dynamic-detail></dynamic-detail>
”的动态模板来重现。
在文件“app/dynamic/template.builder.ts”中,我更改了以下代码:
let editorName = useTextarea
? "text-editor"
: "string-editor";
到
let editorName = useTextarea
? "dynamic-detail"
: "string-editor";
发生这种情况时,我 运行 进入上述异常。显然,编译器在递归完成时不熟悉动态细节。
我曾尝试将 DynamicDetail 添加到不同模块中的导入,但没有成功。也许这不是解决方案的一部分。
如果您将 "text-editor"
更改为 "dynamic-detail"
,那么您的模板将如下所示:
<form>
<dynamic-detail
[propertyName]="'code'"
[entity]="entity"
></dynamic-detail>
<dynamic-detail
[propertyName]="'description'"
[entity]="entity"
></dynamic-detail>
</form>
DynamicDetail
组件没有 propertyName
和 entity
属性。
所以你可以添加他们的。
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