angularjs - 在angularJS中拦截ng-click

标签 angularjs

是否可以为ng-click编写拦截器?
我有一个按钮或链接导致后端中对象的删除。我想通过将属性添加到按钮/链接来创建一个确认对话框(模式)。例如。:

<a href="#" ng-click="deleteIt(id)" confirmation-needed>Delete</a>

AngularJS有可能吗?有没有更好的方法可以解决此问题?

编辑 deleteIt方法位于不同的 Controller 中。

谢谢

最佳答案

我在下面放了一个示例指令:

http://plnkr.co/edit/GJwK7ldGa9LY90bMuOfl?p=preview

我通过创建一个指令来实现它:

  • priorityngClick高的
  • ,因此它在ngClick
  • 之前被调用
  • 生成该terminal,以便它不调用ngClick
  • 监听单击事件,然后在消息正常的情况下评估ngClick值。

  • 作为奖励,您可以传递自己的消息,例如:

    <a href="#" ng-click="deleteIt(id)" 
        confirmation-needed="Really Delete?"
            >Delete with custom message</a>
    

    代码如下:

    app.directive('confirmationNeeded', function () {
      return {
        priority: 1,
        terminal: true,
        link: function (scope, element, attr) {
          var msg = attr.confirmationNeeded || "Are you sure?";
          var clickAction = attr.ngClick;
          element.bind('click',function () {
            if ( window.confirm(msg) ) {
              scope.$eval(clickAction)
            }
          });
        }
      };
    });
    

    希望能有所帮助。

    关于angularjs - 在angularJS中拦截ng-click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208899/

    相关文章:

    javascript - 如何避免函数作为 Controller 范围内的实例成员?

    javascript - AngularJS 中多个指令的一个声明

    javascript - Angular js 应用程序显示语法错误

    javascript - AngularJS 中的全局 "App" Controller

    angularjs - 使用退出键隐藏停留(图层/弹出窗口)

    angularjs - 默认导出未在导入模块中声明

    javascript - NodeJS 应用程序中的 AngularJS "ReferenceError: window is not defined"

    node.js - 了解node Angular Express和mongo之间的通信

    javascript - 减少 Angular js Controller 中的依赖关系

    angularjs - Hot Towel Angular-Breeze 类(class) - 出现 BreezeProvider 错误