Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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
Angularjs 自定义指令干扰ngClick_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 自定义指令干扰ngClick

Angularjs 自定义指令干扰ngClick,angularjs,angularjs-directive,Angularjs,Angularjs Directive,在中,为什么顶部链接中的ngClick可以工作,而我添加了自定义指令的链接中的ngClick完全无法工作 <a class="regular" ng-click="clickTheLink()">A regular ng-click link</a> <a class="disableable" disable="disableTheLink" ng-click="clickTheLink()">A disableable link!</a> 这

在中,为什么顶部链接中的ngClick可以工作,而我添加了自定义指令的链接中的ngClick完全无法工作

<a class="regular" ng-click="clickTheLink()">A regular ng-click link</a>
<a class="disableable" disable="disableTheLink" ng-click="clickTheLink()">A disableable link!</a>

这是因为您正在fiddle的第14行创建一个隔离作用域,clickTheLink函数只存在于控制器中,而不存在于指令中。虽然我强烈建议不要这样做,但您可以通过$parent快速访问父范围

        <a class="disableable" target="_blank" disable="disableTheLink" ng-click="$parent.clickTheLink()">A disableable link!</a>


我的建议是研究ngClass如何工作以及ngClass如何工作。我认为这两种方法都允许您完全不使用这个指令。

问题是,每个DOM元素只有一个作用域。因此,如果任何指令像您在这里使用的那样使用隔离作用域,它将成为元素上唯一的作用域。该作用域与任何父作用域完全断开连接,在您的示例中,
单击链接不在其中

简单的答案是不要使用隔离作用域。这是一个非常好的语法,但您可以手动执行它所执行的所有操作。对于“&”参数,您可以使用parse服务来解析属性表达式

请参阅更新的工作小提琴:

我不确定是否同意“每个DOM元素只有一个作用域”的说法。。。原型继承的本质是,如果您在嵌套在4个控制器中的DOM元素上,该DOM元素可以访问其任何一个父元素的作用域(可以通过作用域链自然访问,也可以通过$parent甚至$rootScope手动访问)。我同意每个DOM元素的作用域不超过一个,但我有一个不同的挑剔点(对不起):如果元素上的两个指令请求新的作用域,一个是孤立的,一个不是(通过作用域:true),元素将没有孤立的作用域。@sh0ber这很有趣。如果在同一元素上有
scope:true
(继承的新作用域)和
scope:{}
(新隔离作用域),则这似乎取决于它们的顺序。如果隔离作用域具有更高的优先级,则整个操作将失败并出现错误。如果反过来看,继承的作用域似乎仍然可以正常工作。我想我需要做更多的调查。不过,肖伯,我的解释似乎很好地解释了为什么OP的例子不起作用。还有这个小提琴,第二个链接在点击时没有任何作用。我同意你的回答正确地指出了问题所在。注意:如果isolate指令的优先级高于
scope:true
指令,或者在元素中声明的优先级早于
指令,则会抛出该错误。
        <a class="disableable" target="_blank" disable="disableTheLink" ng-click="$parent.clickTheLink()">A disableable link!</a>