我在Angular 5应用程序中使用PrimeNG库(https://www.primefaces.org/primeng),我意识到,如果我使用 ViewEncapsulation.Emulated
在Angular组件中使用它的一些控件,我无法向它们应用任何自定义样式 .
例如,我在组件中使用 p-checkbox
控件,我的样式文件中有以下(可怕的)CSS规则:
th {
background-color: olive !important;
}
.ui-chkbox {
background-color: aqua !important;
height: 2.5rem !important;
}
注意: ui-chkbox
是包含复选框的DIV .
如果我设置 encapsulation: ViewEncapsulation.None
,它的外观如下:
如果我改为 encapsulation: ViewEncapsulation.Emulated
,它看起来像:
如您所见,组件 th
标记仍在设置样式,但复选框组件不是 . 我认为模拟视图封装是为了组件样式,因此它们不会与外部定义的其他类型冲突,但它似乎也会影响内部组件 .
有人能解释一下这种行为吗?我已经阅读了几个封装教程,但我找不到原因 .
谢谢!
2 回答
如果不使用
ViewEncapsulation.None
,则无法更改primeng组件样式 .您只能定位每个子组件的host元素 . 您将无法定位组件内使用的任何内部元素 .
Style scope
如果您需要,您仍然可以使用已弃用的
::ng-deep
来定位任何子组件:有关更多信息,请参阅https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep .