【发布时间】:2018-02-09 14:53:40
【问题描述】:
是否可以在模板中定义附加点击处理程序的条件?
例如,我能得到的最接近的方法是在 click 方法的入口处评估条件。
<a class='user' (click)=" isOverflown? menu.toggle($event): '' "></a>
如果标志 isOverflown 为 false,是否有办法完全避免绑定到 click 事件?
另外,我不想在元素上使用ng-if 并复制模板。即:创建一个具有click 绑定的元素并创建另一个没有绑定的元素,然后使用ng-if 显示/隐藏它们
【问题讨论】:
-
没有办法启用/禁用绑定。您可以使用
@ViewChild('.user') aUser:ElementRef;,然后使用this.aUser.nativeElement.addEventListener(...);或removeEventListener() -
当您想避免绑定时,您究竟想达到什么目的?为什么绑定对您有问题?
-
我有一个组件,其中只有当用户为
@Input之一提供值时才需要点击行为。所以,我只知道这两种方式,其中我不想使用ng-if,因为大模板是重复的。所以,我想知道如果不满足条件,是否有一种声明方式根本不注册处理程序。这是否解释了我在尝试什么? -
只要在方法的开头加上
if (!isOverflown) {return},就可以达到同样的效果。 -
@Pac0 不是说特殊情况,但总的来说,事件监听器是一种你更喜欢少而不是多的东西。你想尽可能晚地附加它们,尽可能早地解除附加,如果你不需要它们就不要使用它们。它不仅仅是关于在侦听器方法中处理的最终效果,它与附加侦听器方法有关。因此,他正在寻找一种方法,除非他需要,否则不会拥有它。这是一个很好的做法。
标签: angular