Angular: пользовательский CSS внутри дочернего ngTemplateOutlet

#css #angular #shadow-dom #ng-template

#css #angular #shadow-dom #ng-template

Вопрос:

Я пытаюсь выяснить, как настроить пользовательские стили, которые будут применяться внутри ngTemplateOutlet в Angular. У меня есть два компонента, родительский и дочерний, и я передаю шаблон от родительского к дочернему, который затем печатается с помощью ngTemplateOutlet. Что я хотел бы сделать, так это отобразить шаблоны, используя как родительский, так и дочерний стили, а не только один или другой.

Вот как выглядит HTML моего родительского компонента:

 <child-component [template]="myTemplate">
  <ng-template #myTemplate>
    <p class="paragraph">Hello</p>
  </ng-template>
</child-component>
  

CSS:

 .paragraph { color: red; }
  

И дочерний:

 <ng-container *ngTemplateOutlet="myTemplate"></ng-container>
  

CSS:

 .paragraph { font-weight: bold; }
  

Чего бы я хотел, так это увидеть «Привет» на красном фоне и жирными буквами, но инкапсуляция теневого DOM в Angular заставляет шаблон игнорировать дочерние стили.

Я знаю, что могу решить эту проблему, удалив инкапсуляцию DOM, но это не вариант, поскольку я хочу избежать добавления классов CSS в глобальное пространство имен. Итак, мне интересно, есть ли способ чисто достичь желаемого эффекта в Angular.

Ответ №1:

Попробуйте это:

 ::ng-deep{
 .paragraph { font-weight: bold; }
}
  

Комментарии:

1. @unpollito Приветствую!!! пожалуйста, примите этот ответ, если он работает для вас 🙂

2. Я буду. StackOverflow просто заставляет меня ждать 15 минут, прежде чем я смогу его принять. 🙂

3. Рекомендуется использовать ::ng-deep вместо /deep/ .

4. @VikasJadhav По вашей ссылке: «Комбинатор-потомок, проникающий в тень, устарел, и поддержка удаляется из основных браузеров и инструментов. Таким образом, мы планируем отказаться от поддержки в Angular (для всех 3 из /deep/, >>> и ::ng-deep). До тех пор следует отдавать предпочтение ::ng-deep для более широкой совместимости с инструментами «.

5. @VikasJadhav — Да, но Angular рекомендует использовать ::ng-deep .