angularjs - 自定义指令干扰 ngClick

标签 angularjs angularjs-directive

this fiddle ,为什么顶部链接中的 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 行为,因为它所做的只是操作 CSS 类:

app.directive('disableable', function(){
  return {
    restrict: 'C',
    scope: { disable: '&' },
    link: function (scope, elem, attrs) {
        scope.$watch(scope.disable, function (val) {
            if (val){
                elem.addClass('disabled');
                elem.removeClass('enabled');
            }
            else {
                elem.addClass('enabled');
                elem.removeClass('disabled');
            }
        });
    }
  };
});

最佳答案

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

简单的答案是不使用隔离范围。这是一个非常好的语法,但您可以手动完成它所做的一切。对于“&”参数,您可以使用解析服务来解析属性表达式。

查看更新的工作 fiddle : http://jsfiddle.net/SNQQV/3/

关于angularjs - 自定义指令干扰 ngClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16704429/

相关文章:

angularjs - UI-路由器 : Can I get always the same controller?

angularjs - Aptana AngularJS 支持

javascript - $resource 的 url 参数的基于冒号的模板语法是否遵循标准,还是 AngularJS 特定的?

javascript - 关于 'the angular way' 的不安全感

javascript - 自定义指令链接中的 element.replaceWith 仅在第一次调用时有效

javascript - 当我使用 ng-options 为什么我选择的没有值(value)

javascript - Angular Controller 无法获取 'this'

angularjs - 禁用指令属性的 Angular 修剪

javascript - AngularJS : Compile directives inside HTML returned by an API

angularjs - 将 json 字符串作为参数传递给 ng-click