Angular @Hostbinding не работает
У меня похожая проблема с @Hostbinding, как и у других вопросов, но я не смог ее решить.
Мой шаблон:
<main class="my_active">
<user myDirective="'false'">
</user>
</main>
И моя директива
@Directive({
selector:'[myDirective]'
})
export class MyDerective {
@HostBinding('class.img')
isMyCirclePic:boolean;
@HostListener('mouseover')
onMouseEnter(){
console.log('VALUE BEFORE:', this.isMyCirclePic);
console.log('MAUS ENTER');
this.isMyCirclePic=true;
console.log('VALUE AFTER:', this.isMyCirclePic);
}
@HostListener('mouseleave')
onMouseLeave(){
console.log('VALUE BEFORE:', this.isMyCirclePic);
console.log('MAUS LEAVE');
this.isMyCirclePic=false;
console.log('VALUE AFTER:', this.isMyCirclePic);
}
}
- Проблема в том, что мой isMyCirclePic впервые не определен. После этого будет установлено значение false. Я использую один и тот же шаблон несколько раз, и когда я нажимаю на другой шаблон (из шаблона того же типа), то также не определен и MyCirclePic.
- Я изменяю значение true или false в событиях, но оно не будет отображено. Моя картинка "class.img" каждый раз остается на одном и том же значении.
ОБНОВИТЬ
Я опробовал решение с @Input @HostBinding.
<main class="my_active">
<user
myDerective
[myColor]="font_color">
</user>
</main>
И мой myColor-Direktive:
@Directive({
selector:'[myColor]'
})
export class MyColor {
@HostBinding('style.color')
font_color:string;
@Input()
set myColor(color:string) {
this.font_color = color;
console.log('COLOR VALUE SET:', this.font_color);
}
get myColor():string{
console.log('COLOR VALUE GET:', this.font_color);
return this.font_color;
}
}
Но это все еще не работает. Я вижу, что значение будет передаваться @Input-param. Я вижу, что функция set будет вызвана. Но я не вижу, что будет вызвана функция get, что я и ожидал. Так что я не вижу изменений.
1 ответ
Вы можете использовать @Input() @HostBinding
@Directive({
selector:'[myDirective]'
})
export class MyDerective {
@Input() @HostBinding('class.img') isMyCirclePic:boolean;
@HostListener('mouseover')
onMouseEnter(){
console.log('VALUE BEFORE:', this.isMyCirclePic);
console.log('MAUS ENTER');
this.isMyCirclePic=true;
console.log('VALUE AFTER:', this.isMyCirclePic);
}
@HostListener('mouseleave')
onMouseLeave(){
console.log('VALUE BEFORE:', this.isMyCirclePic);
console.log('MAUS LEAVE');
this.isMyCirclePic=false;
console.log('VALUE AFTER:', this.isMyCirclePic);
}
}
свяжите это в tmeplate
<div myDirective [isMyCirclePic]="false">
myDirective
</div>