Angular2 проблемы с дизайном, вызванные атрибутами DOM _ngcontent- * vs. _nghost- *
У меня проблема с scss и cli: angular добавляет атрибут _nghost-fyw-1
к тегу приложений (компонент) во время выполнения. в то же время он добавляет селектор атрибутов в мой css под названием _ngcontent-fyw-1
, который, конечно, не будет работать.
У вас есть идея, как я могу изменить это поведение/избежать его?
PS: это также относится к регулярному css.
мои компоненты .scss файл выглядит следующим образом:
my-comp {
h1 {
background-color: red;
}
}
Ответы
Ответ 1
Ну,
Я сам нашел ответ. Используя настройки по умолчанию, вы не должны поставлять пакетный селектор my-comp
в компонентах css.
Вместо этого используйте селектор элементов *
, чтобы воздействовать на все элементы, вложенные в my-comp
. В противном случае angular будет обрабатывать селектор my-comp
в качестве дополнительного элемента и, таким образом, добавить атрибут _ng-content-*
, который, конечно, отсутствует в DOM.
Другой вариант - отключить ViewEncapsulation
для вашего компонента - знать, что он просто влияет на компонент my-comp
import {Component, ViewEncapsulation} from 'angular2/core'
@Component({
selector: 'my-comp',
encapsulation: ViewEncapsulation.None,
...
});
https://egghead.io/lessons/angular-2-controlling-how-styles-are-shared-with-view-encapsulation отлично описывает три режима настроек.
Ответ 2
Обновить
Это ::ng-deep
с некоторого времени.
Смотрите также комментарии ниже.
оригинал
Вы не предоставили слишком много деталей, где вы добавляете свои стили и какие элементы вы выбираете с помощью селекторов.
Если вы хотите, чтобы стили пересекали границы элементов, "официальным" способом является использование >>>
like
:host >>> h1 {
background-color: red;
}
-
:host
нацелен на текущий элемент. -
>>>
(или /deep/
) заставляет Angular игнорировать _nghost-xxx
которые используются для эмуляции инкапсуляции стиля компонента.
См. Также Стили в компоненте для D3.js не отображаются в угловых 2