【发布时间】:2014-03-24 05:39:04
【问题描述】:
任务
我想要一个在元素外部单击时调用函数的指令。 用例是在单击时打开菜单并在单击菜单外部时关闭。
问题
该指令将 onlick 绑定到窗口以检查元素外部的点击,但 onclick 函数获取最后一个范围,而不是“正确”范围
Plunkr
http://plnkr.co/edit/ePKMMsbe9HYikY9XQ1u3?p=preview
简化指令:
app.directive('clickanywherebuthere', ['$document', '$timeout', function($document, $timeout) {
return {
link: function postLink(scope, element, attrs) {
onClick = function(event) {
var isChild = element.has(event.target).length > 0;
var isSelf = element[0] == event.target;
var isInside = isChild || isSelf;
if (!isInside)
scope.$apply(attrs.clickanywherebuthere)
}
scope.$watch(attrs.isActive, function(newValue, oldValue) {
if (newValue !== oldValue && newValue == true) {
$timeout(function() { $document.bind('click', onClick) })
}
else if (newValue !== oldValue && newValue == false) {
$document.unbind('click', onClick);
}
});
}
};
}])
【问题讨论】:
标签: javascript angularjs