【发布时间】:2014-01-22 17:33:45
【问题描述】:
我有一个简单的 Angular 指令,它在被点击时向元素添加一个 CSS 类:
.directive("addClass", function () {
return {
scope: {
name: "=addClass"
},
link: function (scope, element, attributes) {
element.on("click", function () {
element.addClass(scope.name);
console.log("Element activated");
});
element.on("mouseleave", function () {
element.removeClass(scope.name);
console.log("Element deactivated");
});
}
}
});
我在我的链接上使用它:
<a href="" add-class="class-name">...</a>
但是当我点击我的链接时,我的事件处理程序会执行,尽管 scope.name 是 undefined。我可以使用attributes 读取属性值,但这超出了将属性值分配给范围属性的目的,如Angular Directives API 中所述。
我做错了什么?
【问题讨论】:
-
最好使用模板和
ng-click,然后直接处理click事件。否则,您需要通过调用scope.$apply让 Angular 知道(如果您想操纵范围)您正在侦听 DOM。 -
@DavinTryon 我认为这里不需要
$apply(),因为他直接处理元素(不涉及摘要循环)。此外,他的指令似乎与另一个元素一起使用,因此无法使用自定义模板。 -
@MichaelBenford:谢谢。你写的完全正确。
-
@MichaelBenford 是的,这就是我写“如果你想操纵范围”的原因。
标签: angularjs angularjs-directive