Псевдоселектор :host
предназначен для элемента хоста вашего компонента (например, <app-hello>
, элемент недоступен в собственной разметке).Это так просто, как кажется.
::ng-deep
немного отличается.Когда Angular компилирует стили компонентов, этот селектор заставит стиль просачиваться через все дочерние компоненты как часть их собственного инкапсулированного контекста.
То, что вы говорите с :host ::ng-deep .test {
, это «целевые потомки элемента host»[_nghost-c1]
и все элементы, которые являются дочерними элементами элемента host с class = "test".
Правило .test {
, заключенное в этот компонент, говорит "предназначайтесь для каждого элемента в этом компоненте (скомпилировано в * 1015").*) with class = "test".
Поскольку h1
является потомком хоста, но прямым членом компонента, последний является более конкретным правилом и выигрывает битву CSS.