Я не знаю, как добавить к моему компоненту атрибут <component></component>
динамического класса, но внутри шаблона html (component.html).
Единственное решение, которое я нашел, это изменить элемент с помощью нативного элемента "ElementRef". Это решение кажется немного сложным, чтобы сделать что-то, что должно быть очень простым.
Другая проблема заключается в том, что CSS должен быть определен вне области компонента, нарушая инкапсуляцию компонента.
Есть ли более простое решение? Что-то вроде <root [class]="..."> .... </ root>
внутри шаблона.
angular
angular2-template
lascarayf
источник
источник
someField = true
вngOnInit()
-методе вместоngAfterViewInit()
. Я не мог заставить это работать иначе.:host
часть работы. Где я могу узнать больше о параметре хоста в декораторе @Component () (синтаксис для меня неочевиден, а документация @Component мало что объясняет ) или узнать больше о предпочитаемом HostBinding (он указан только как Интерфейс на Сайт Angular2?)@Input()
@Output()
@HostBinding()
@HostListener()
@ViewChild(ren)()
@ContentChild(ren)()
@HostBinding('class.xxx') get xxxclass(){ return !this.someField;}
Ответ Гюнтера великолепен (вопрос требует атрибута динамического класса), но я подумал, что добавлю только для полноты ...
Если вы ищете быстрый и понятный способ добавить один или несколько статических классов к элементу host вашего компонента (т. Е. Для целей оформления тем), вы можете просто сделать:
И если вы используете класс в теге entry, Angular объединит классы, т.е.
источник
ngcontent_host
чем любой из атрибутов элементов в моем шаблоне, let's call those
ngcontent_template, so if I put a style in the
styleUrls` моего компонента, они не будут влиять на элемент хоста, потому что они не будут влиятьngcontent_host
, они может влиять только на элементы шаблона; они могут только влиятьngcontent_template
. Я ошибаюсь? Есть предложения по этому поводу? Я думаю, что я всегда мог повернутьViewEncapsulation.None
@HostBinding('class.someClass') true;
. Вы даже можете сделать это из любого класса, который расширяет ваш компонент.{}
вариант host:, вы можете установитьuse-host-property-decorator
значениеfalse
intslint.json
. В противном случае вы получите предупреждения IDE. @adamdport Этот метод больше не работает. Используя Angular 5.2.2 в нашем приложении.Вы можете просто добавить
@HostBinding('class') class = 'someClass';
в свой класс @Component .Пример:
источник
class
качестве имени переменной (так как вы можете ссылаться на него и изменить его позже). Пример:@HostBinding('className') myTheme = 'theme-dark';
.Если вы хотите добавить динамический класс к вашему хост-элементу, вы можете объединить его
HostBinding
с геттером какДемонстрация Stackblitz по адресу https://stackblitz.com/edit/angular-dynamic-hostbinding
источник
Вот как я это сделал (Angular 7):
В компонент добавьте вход:
Затем в HTML-шаблон компонента добавьте что-то вроде:
И, наконец, в шаблоне HTML, где вы создаете экземпляр компонента:
Отказ от ответственности: я довольно новичок в Angular, так что, возможно, мне просто повезло здесь!
источник
<root>
тега, а не чем-либо, что вы добавляете в шаблон элемента.