Убедитесь, что вы не пропустите объяснение, :host-context
которое находится прямо выше ::ng-deep
в угловом руководстве: https://angular.io/guide/component-styles . Отказ от ответственности: я пропустил это до сих пор и хотел бы увидеть его раньше.
::ng-deep
часто бывает необходимо, когда вы не писали компонент и не имеете доступа к его источнику, но :host-context
может быть очень полезным вариантом, когда вы это делаете.
Например, у меня есть черный <h1>
заголовок внутри компонента, который я разработал, и мне нужна возможность изменить его на белый, когда он отображается на темном тематическом фоне.
Если бы у меня не было доступа к источнику, мне, возможно, пришлось бы сделать это в CSS для родителя:
.theme-dark widget-box ::ng-deep h1 { color: white; }
Но вместо этого :host-context
вы можете сделать это внутри компонента.
h1
{
color: black;
:host-context(.theme-dark) &
{
color: white;
}
:host-context([theme='dark']) &
{
color: white;
}
}
Это будет искать где угодно в цепочке компонентов .theme-dark
и применять CSS к h1, если он найден. Это хорошая альтернатива слишком многому, ::ng-deep
что, хотя и часто необходимо, является своего рода антипаттерном.
В этом случае &
вместо него используется h1
(так работает sass / scss), поэтому вы можете определить свой «нормальный» и тематический / альтернативный CSS рядом друг с другом, что очень удобно.
Будьте осторожны, чтобы получить правильное количество :
. Ибо ::ng-deep
их два и :host-context
только один.
/deep/
и::ng-deep
оба устарели, я предлагаю вам принять к этому советует сначала ответ stackoverflow.com/a/49308475/2275011 и комментарии для получения более подробной информации и решений.