Angular 2 – innerHTML样式
我从HTTP调用中获取大量的HTML代码。 我把HTML块放在一个variables中,并使用[innerHTML]将其插入到我的页面中,但是我无法对插入的HTML块进行样式设置。 有没有人有任何build议,我可以做到这一点?
@Component({selector: 'calendar', template: '<div [innerHTML]="calendar"></div>', providers:[HomeService], styles: [` h3 {color:red;} `})
我想要的样式的HTML是包含在variables“日历”中的块。
update :: ng-deep
/deep/
被弃用,并被::ng-deep
取代。
::ng-deep
也已被标记为废弃,但目前还没有可用的替代品。
当所有浏览器都支持ViewEncapsulation.Native
,并且支持阴影DOM边界的样式时, ::ng-deep
可能会被终止。
原版的
Angular将各种CSS类添加到它添加到DOM的HTML中,以模拟阴影DOM CSS封装,从而防止出入组件的样式。 Angular还会重写您添加的CSS以匹配这些添加的类。 对于使用[innerHTML]
添加的HTML,不会添加这些类,并且重写的CSS不匹配。
作为解决方法尝试
- 为CSS添加组件
/* :host /deep/ mySelector { */ :host ::ng-deep mySelector { background-color: blue; }
- 为CSS添加到
index.html
/* body /deep/ mySelector { */ body ::ng-deep mySelector { background-color: green; }
>>>
(和等效/deep/
/deep/
SASS更好)和::shadow
被添加到2.0.0-beta.10。 它们类似于阴影DOM CSS组合器(已弃用),只能用于encapsulation: ViewEncapsulation.Emulated
,这是encapsulation: ViewEncapsulation.Emulated
中的默认设置。 他们也可能与ViewEncapsulation.None
工作,但只是被忽略,因为它们不是必需的。 这些组合器只是一个中间解决scheme,直到支持跨组件样式的更高级function。
另一种方法是使用
@Component({ ... encapsulation: ViewEncapsulation.None, })
对于阻止你的CSS的所有组件(取决于你添加CSS的位置以及你想要的HTML样式 – 可能是你的应用程序中的所有组件)
更新
示例Plunker