【发布时间】:2018-06-17 15:41:39
【问题描述】:
这两天我一直在努力寻找解决这个问题的方法。不幸的是,我无法得到我想要的。我正在使用 Angular5。
<div class="form-group col-md-12" [innerHTML]="GetItemsOfHolder(item.children[1],1,
'UserConfigGroupsLabelHolder') | keepHtml"></div>
这是我的函数的样子:
GetItemsOfHolder(item: any,divName:string, recursive: boolean = false,typeName:string="")
{
return html;
}
一切正常,除非我返回的 html 包含一个名为 Select2 的包 这是我用来将 html 添加到这个 div 中的,它工作得很好。直到我想添加动态包。
我的意思是返回 html 包含这样的包组件:
itemhtml +="<select2 data-type='"+holderItem.itemType+"'
[data]='this.dropdownData."+holderItem.name+"'></select2>"
这只是将纯文本返回给浏览器,并没有按预期工作。
我想要的是将字符串转换为组件或任何其他可以工作并生成 select2 下拉列表的方式。
我一直在尝试搜索很多东西。但它不起作用 This is good but I can not understand this 不推荐使用动态组件加载。
谁能给我一个想法我该如何解决这个问题?任何例子都会很棒。
【问题讨论】:
-
Angular 会清理几乎所有内容,这就是为什么你会得到纯文本。您要研究的是 ReflectiveInjector,主要是 ComponentFactoryResolver。主要思想是组件需要渲染一些其他信息(服务、其他组件等),因此您使用注入器获取依赖注入引用,然后组件工厂构建您的组件。然后将其插入到 ViewChild 引用中。有一种更复杂的方式来动态制作组件,它使用编译器并需要 ModuleWithComponentFactories,这就是 Angular 实际使用的方式。
-
@Devcon 谢谢你的回答,你能给我举个例子吗?
-
@Justcode 这不是你妈妈的 AngularJS ;D 开个玩笑,你不能像在 AngularJS 中那样添加新组件 观看和哭泣youtube.com/…
-
@user1740331 在 1.0 之前我能够轻松做到这一点:P 任何方式感谢链接。
标签: javascript angular typescript dynamic components