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