Отключение эффекта ViewEncapsulation.None в Angular
Как отключить эффект ViewEncapsulation.None? Например, один из моих компонентов (firstComponent) определяет класс css с некоторыми свойствами. Существует secondComponent, который использует тот же класс CSS. Я хочу, чтобы мой "secondComponent" использовал разные конкретные значения для свойств, определенных таблицей стилей первого компонента. Как мне этого добиться?
Примечание: я переопределил один и тот же класс в "secondComponent" с другими значениями, сохранив viewEncapsulation secondComponent по умолчанию. Это не сработало для меня.
FirstComponent:
@Component({
moduleId: module.id,
selector: "FirstComponent",
templateUrl: 'FirstComponent.component.html',
styleUrls: ['FirstComponent.component.css'],
encapsulation: ViewEncapsulation.None
})
FirstComponent.component.css
.ui-tree .ui-tree-container {
background-color: #252525;
color: white;
}
Second Component:
@Component({
moduleId: module.id,
selector: "SecondComponent",
templateUrl: 'SecondComponent.component.html',
styleUrls: ['SecondComponent.component.css'],
})
SecondComponent.Component.css
.ui-tree .ui-tree-container {
background-color: white;
color: black;
}
Я создаю p-дерево в обоих компонентах, которые внутренне используют.ui-tree-container. Я хочу, чтобы фон дерева моего второго компонента был белым, в то время как для всех остальных мест фон дерева должен оставаться черным.
3 ответа
Вы также можете использовать Default ViewEncapsulation для FirstComponent, а вместо этого использовать селектор::ng-deep в файлах CSS соответственно.
SecondComponent
::ng-deep .ui-tree .ui-tree-container{
background-color: white;
color: black;
}
FirstComponent
::ng-deep .ui-tree .ui-tree-container{
background-color: #252525;
color: white;
}
Вы можете инкапсулировать свой CSS в ваших селекторах компонентов.
FirstComponent.component.css
FirstComponent .ui-tree .ui-tree-container {
background-color: #252525;
color: white;
}
SecondComponent.component.css
SecondComponent .ui-tree .ui-tree-container {
background-color: white;
color: black;
}
Таким образом, они не будут влиять друг на друга шаблоны. Кроме того, вы можете использовать ViewEncapsulation.None
для обоих / любого из них или нет.
Если вы хотите повторно использовать CSS белый только для настройки некоторых частей, вы можете использовать переменные scss
Шаг 1
Создать файл scss с общими свойствами и цветами по умолчанию
commontree.scss
$bgColor : white !default;
$color: black !default;
.ui-tree .ui-tree-container {
background-color: $bgColor;
color: $color;
}
Шаг 2
В файле scss вашего компонента измените значения переменных, если это необходимо, и импортируйте comss scss файл
component1.scsss
$bgColor: #252525; /* Override colors */
$color: white;
@import './commontree.scss';
component2.scss
/* Use default colors */
@import './commontree.scss';
Для этого вы можете (и, вероятно, должны) сохранить инкапсуляцию вида по умолчанию ViewEncapsulation.Emulated