【发布时间】:2018-01-04 13:21:44
【问题描述】:
我是 Angular 2 的新手,我正在学习有关如何创建自定义指令的教程,但我对它的工作原理有些疑问。
我会尝试解释它做了什么。
我有一个视图包含这样的内容:
<div class="row">
<div class="col-xs-12">
<div
class="btn-group"
appDropDown
>
<button
type="button"
class="btn btn-primary dropdown-toggle">Manage Recipe <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">To Shopping List</a></li>
<li><a href="#">Edit Recipe</a></li>
<li><a href="#">Delete Recipe</a></li>
</ul>
</div>
</div>
</div>
正如你所见,这个具有 btn-group 类的潜水设置了我的自定义 appDropDown
<div
class="btn-group"
appDropDown
>
这个自定义指令只是在单击内部按钮时将 open 类添加到此 div(因此 UL 内容由 BootStrap 显示)。
这是我的自定义指令的代码:
import {Directive, HostBinding, HostListener} from "@angular/core";
@Directive({
selector: '[appDropDown]'
})
export class DropDownDirective {
@HostBinding('class.open') isOpen = false;
// listen to a click event:
@HostListener('click') toggleOpen() {
this.isOpen = !this.isOpen;
}
}
据我所知,这个指令是这样工作的:
1) 这一行:
@HostBinding('class.open') isOpen = false;
将 isOpen 变量绑定到应用了我的自定义指令的 div 的 class.open 属性的值。
所以这应该意味着如果这个潜水有 open 类设置该值将为真,否则为假。
这个解释正确吗?
2) 这种方法:
// listen to a click event:
@HostListener('click') toggleOpen() {
this.isOpen = !this.isOpen;
}
当用户在视图中单击此按钮时执行:
<button
type="button"
class="btn btn-primary dropdown-toggle">Manage Recipe <span class="caret"></span>
</button>
好的,现在我的疑问是:为什么只有当我点击这个特定按钮而不是当我点击页面中的任何其他按钮时才会执行此方法?
【问题讨论】:
标签: javascript angular angular2-directives angular-directive javascript-framework