【发布时间】:2020-04-14 10:02:03
【问题描述】:
我想创建一个通用的 html 片段组件。我们的想法是我们可以将 html 片段存储在某处的数据库中,以及应该应用于它们的样式。
我可以轻松设置 innerHtml 以将 html 结构插入到我的视图模板中的基本元素中,但是如何在我的视图模板中动态插入 <style> 标记?
这是我所拥有的:
@Component({
moduleId: module.id,
selector: 'htmlFragment',
styleUrls: ['html-fragment.css'],
templateUrl:'html-fragment.html'
})
export class HtmlFragmentComponent {
@Input() htmlContent: string;
@Input() styleContent: string;
}
这是视图模板:
<style [innerHTML]="styleContent"></style>
<div [innerHTML]="htmlContent"></div>
然后我尝试这样使用它:
<htmlFragment [htmlContent]='dHtml' [styleContent]="sHtml"></htmlFragment>
地点:
dHtml: string = '<div>hello this is html<ul><li>bla bla</li><li>bla bla 2</li></ul></div>';
sHtml: string = 'ul{list-style-type: none;}';
html 片段在此处正确注入:
<div [innerHTML]="htmlContent"></div>
但是这里的样式元素:
<style [innerHTML]="styleContent"></style>
工作不正常。有没有办法做到这一点?
【问题讨论】:
-
我已经搜索了一段时间,您会找到的方法要么过于指定,如 [style.color]="blue",要么是具有破坏 AOT 的动态组件等的顶级解决方案。现在(使用 shadow dom)显然是一种 hack,可以按照他们一直以来的方式做事。所以,一个快速的技巧,如果你将样式标签作为一个字符串添加到你的 html 字符串中,它应该呈现。但我会考虑另一种方法,甚至可能是另一种不基于组件的框架。