angularjs - 在自定义指令中禁用 ngClick 事件处理

标签 angularjs angularjs-directive

这是一个指令,我试图在其中禁用基于模型值的链接:

app.directive('disableable', function($parse){
    return {
        restrict: 'C',
        require: '?ngClick',
        link: function (scope, elem, attrs, ngClick) {
            if (attrs.disable){
                var disable = $parse(attrs.disable);

                elem.bind('click', function (e) {
                    if (disable(scope)){
                        e.preventDefault();
                        return false;
                    }

                    return true;
                });

                scope.$watch(disable, function (val) {
                    if (val){
                        elem.addClass('disabled');
                        elem.css('cursor', 'default');
                    }
                    else {
                        elem.removeClass('disabled');
                        elem.css('cursor', 'pointer');
                    }
                });
             }
         }
     };
});

我希望能够禁用所有链接操作,无论它们使用简单的 href 还是 ngClick 操作。由于 preventDefault 调用,Hrefs 工作正常,但我不知道如何深入挖掘 ngClick 并防止它触发。我对 click 事件进行的绑定(bind)不起作用,因为 ngClick 似乎正在绑定(bind)我无法控制的自己的处理程序。有什么我可以做的吗?

jsFiddle:http://jsfiddle.net/KQQD2/2/

最佳答案

使用event.stopImmediatePropagation .

来自 MDN :

If several listeners are attached to the same element for the same event type, they are called in order in which they have been added. If during one such call, event.stopImmediatePropagation() is called, no remaining listeners will be called.



...
elem.bind('click', function (e) {
  if (disable(scope)){
    e.stopImmediatePropagation();
    return false;
  }

  return true;
});
...

WORKING FIDDLE

关于angularjs - 在自定义指令中禁用 ngClick 事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820523/

相关文章:

javascript - 使用循环定义许多 Angular 指令

javascript - 我们可以在 AngularJS 中深度克隆事件对象吗?

javascript - AngularJS - 访问 ng-view 之外的元素

javascript - Nodejs/ExpressJs 和 Angular(单页应用程序)中基于 token 的授权

javascript - 将 JSON ID 键插入 ng-click 指令,然后将其传递给另一个 Controller

angularjs - 全高 Angular UI Accordion

javascript - 如何覆盖/更改值提供者的 AngularJS 值

angularjs - 如何使用angularjs和MVC3以相同的功能从两个不同的html文件上传中保存两个文件

javascript - 根据收到的模型值加载不同模板的指令

angularjs - 移动由 ng-repeat 创建的 angularJS 元素