Javascript Angular指令在不使用隔离作用域的情况下执行函数
我正在尝试创建一个指令,该指令仅在单击它所在的元素时触发单击事件。如果单击了子元素,我不希望触发click事件。这就是我到目前为止所做的,而且似乎是在耍花招Javascript Angular指令在不使用隔离作用域的情况下执行函数,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,我正在尝试创建一个指令,该指令仅在单击它所在的元素时触发单击事件。如果单击了子元素,我不希望触发click事件。这就是我到目前为止所做的,而且似乎是在耍花招 bizi.directive('bbStrictClick', [ function () { return { restrict: 'A', replace: false, scope: { clicked: '&bbStrictClick'
bizi.directive('bbStrictClick', [
function () {
return {
restrict: 'A',
replace: false,
scope: {
clicked: '&bbStrictClick'
},
link: function (scope, element, attrs, controller) {
element.click(function (event) {
if (event.target === element[0]) {
event.stopImmediatePropagation();
event.stopPropagation();
scope.clicked();
}
});
}
};
}
]))
问题是我使用的是隔离作用域,因此我无法将此指令添加到具有使用隔离作用域的其他指令的元素中。是否有一种方法可以在不使用隔离作用域的情况下执行指令属性值中指定的函数?是,使用$scope。$eval: $rootScope.Scope#$eval 您还可以使用$parse将表达式预解析为函数,然后执行该函数(基本上就是
&
所做的)
编辑:您可以看看angular的源代码中ngClick是如何编码的:
bizi.directive('bbStrictClick', [
function () {
return {
restrict: 'A',
link: function (scope, element, attrs, controller) {
element.click(function (event) {
if (event.target === element[0]) {
event.stopImmediatePropagation();
event.stopPropagation();
scope.$eval(attrs.bbStrictClick);
}
});
}
};
}])