拦截对控制器的调用

时间:2014-09-06 22:12:17

标签: angularjs

我可以拦截对控制器方法的调用吗? 我搜索像Castle Windsor Proxy对象的拦截器,用于实现类似AOP的东西。

例如:

<button ng-click="buttonClick()"/>
<button ng-click="i = i + 1"/>

我想找到如何在ng-click执行之前和之后执行一些代码。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以添加一个指令来拦截任何元素的click事件。

HTML:

<button ng-click="buttonClick()" intercept-click />

JavaScript的:

app.directive('interceptClick', function() {
  return {
    priority: 1,
    terminal: true,
    link: function (scope, element, attr) {
      var clickAction = attr.ngClick;
      element.bind('click',function () {
        // Do something before executing the click action
        scope.$eval(clickAction);
        // Do something after executing the click action
      });
    }
  };
});

答案 1 :(得分:0)

[我不确定是否可以实现一般方法] 这是一个结合丹尼斯方法的jsfiddle 您只需重用现有的ngclick指令。

myApp.directive('ngClick', function() { 
  return {  
      restrict:'A',

      link: {
           pre: function(scope,element){
              element.bind('click',function () {        
                console.log('interceptor');                    
                 // scope.$eval(clickAction);
                // Do something after executing the click action
              });
          }
      }
  }
});

http://jsfiddle.net/HB7LU/6191/