我最近尝试在Angular组件中注入HTML。借助[innerHTML]和Angulars的“ bypassSecurityTrustHtml”功能,我迅速找到了一种解决方案,该解决方案在95%的用例中都对我有用,但是不幸的是,并非每种情况都适用。
什么是HTML :HTML是由后端服务提供的呈现的电子邮件(-Preview)。这是一个完整的HTML文档,其中包含一个头部片段,其中也可能包含专用的样式标签。
出了什么问题:不幸的是,由于HTML的特性,电子邮件样式标签内的定义也被应用到了封闭的Angular应用程序中。因此,我的Angular Components受这些样式定义的影响(它们有时也具有!important-flag)。使用“ ViewEncapsulation.ShadowDom”有帮助,但IE11不支持,这是必须的!另一方面,默认的“ ViewEncapsulation.Emulated”不适用于通过[innerHTML]绑定的HTML。
为解决此问题,我目前使用Juice库从“电子邮件预览” HTML中的样式标签内联样式。那行得通,但是从我的角度来看,重新使用Angular模仿Shadow Dom的行为会更干净。也就是说,将其他属性添加到“电子邮件预览” DOM中的节点,并重写头部的样式选择器,以仅选择具有特定属性的元素。 所以我的问题是,在通过[innerHtml]进行绑定之前,我是否可以使用Angular功能或已知的第三方库来模拟给定HTML-String / JavaScript文档的阴影圆顶