Директивы атрибутов могут принимать входные данные, аналогично компонентам. Например, предположим, что мы хотим улучшить директиву атрибута из Angular docs , чтобы удалить жёстко заданный цвет фона «желтый» и предоставить разработчику возможность выбрать собственный цвет по своему выбору.
Angular Пример из документов:
import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
Используется, как показано ниже:
<p appHighlight>
Highlight me!
</p>
Чтобы принять выбор пользователя для цвета, мы можем добавить @Input()
, скажем, с именем highLightColor
. Так как его значение доступно только в ngOnInit
(или после этого перехватывает жизненный цикл), нам также придется переместить код, который обновил цвет фона элемента из конструктора, в метод ngOnInit
, как показано ниже
Расширенный пример:
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective implements OnInit {
@Input()
highLightColor = 'yellow';
constructor(private el: ElementRef) {
}
ngOnInit() {
this.el.nativeElement.style.backgroundColor = this.highLightColor;
}
}
Будет использоваться, как показано ниже:
<p appHighlight [highLightColor]="'red'">
Highlight me!
</p>
Аналогично, вы можете добавить @Input()
, если ваша директива имеет больше точек настройки. В реальной жизни вы не можете использовать его для обновления стандартных атрибутов HTML, но возможны и другие варианты.