Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular指令在不使用隔离作用域的情况下执行函数_Javascript_Jquery_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript Angular指令在不使用隔离作用域的情况下执行函数

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'

我正在尝试创建一个指令,该指令仅在单击它所在的元素时触发单击事件。如果单击了子元素,我不希望触发click事件。这就是我到目前为止所做的,而且似乎是在耍花招

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);
                }
            });
        }
    };
}])