Убедитесь, что вы не пропустите объяснение, :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 и комментарии для получения более подробной информации и решений.