我从HTTP调用中获取大量HTML代码 . 我将HTML块放在一个变量中并使用[innerHTML]将其插入到我的页面中,但我无法设置插入的HTML块的样式 . 有没有人有任何建议如何实现这一目标?
@Component({selector: 'calendar',
template: '<div [innerHTML]="calendar"></div>',
providers:[HomeService],
styles: [`
h3 {color:red;}
`})
我想要设置样式的HTML是变量“calendar”中包含的块 .
1 回答
update 2 ::slotted
::slotted
现在受到所有新浏览器的支持,可以与`ViewEncapsulation.ShadowDom一起使用https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
update 1 ::ng-deep
/deep/
已弃用,已替换为::ng-deep
.::ng-deep
也已标记为已弃用,但尚无替代品 .当
ViewEncapsulation.Native
被所有浏览器正确支持并支持横向DOM边界的样式时,::ng-deep
可能会停止使用 .original
Angular将各种CSS类添加到它添加到DOM的HTML中,以模拟shadow DOM CSS封装,以防止组件内外流失的样式 . Angular还会重写您添加的CSS以匹配这些添加的类 . 对于使用
[innerHTML]
添加的HTML,不会添加这些类,并且重写的CSS不匹配 .作为一种解决方法尝试
index.html
>>>
(等效/deep/
但/deep/
对SASS效果更好)和::shadow
在2.0.0-beta.10中添加 . 它们类似于shadow DOM CSS组合器(不推荐使用),只能与encapsulation: ViewEncapsulation.Emulated
一起使用,这是Angular2中的默认设置 . 它们也可能与ViewEncapsulation.None
一起工作,但之后只会被忽略,因为它们不是必需的 . 在支持跨组件样式的更高级功能之前,这些组合器只是一种中间解决方案 .另一种方法是使用
对于阻止CSS的所有组件(取决于您添加CSS的位置以及要设置样式的HTML的位置 - 可能是应用程序中的 all 组件)
Update
Example Plunker