import { Directive, HostBinding, HostListener } from '@angular/core';
@Directive({
selector: '[expandMenu]'
})
export class ExpandMenuDirective {
constructor() { }
@HostBinding('class.active') isOpen = false;
@HostListener('click') toggleOpen($event){
this.isOpen = !this.isOpen;
}
}
答案 0 :(得分:0)
如果要捕获外部单击,则应使用blur
,但是如果在div
上使用它则无法使用,因为div内容不可编辑。
但是有一种解决方法。假设这是您的指令:
import { Directive } from '@angular/core';
@Directive({
selector: '[classHandler]',
host: {
'(click)':'_setInputFocus(true)',
'(blur)':'_setInputFocus(false)',
'[class.md-input-focus]':'inputFocusClass'
}
})
export class ClassHandler {
inputFocusClass: boolean = false;
_setInputFocus(isFocus: boolean) {
this.inputFocusClass = isFocus;
}
}
现在您在div或菜单项上使用它:
<div classHandler>This is a placeholder</div>
这将不起作用,但是如果您添加tabindex="1"
,则它将起作用:
<div tabindex="1" classHandler>This is a placeholder</div>
我相信这会解决您的问题。您可以拥有一个working stackblitz here。