2015-06-22 119 views
0

在这一点上,我是AngularJS的新手。AngularJS动态调用函数

这工作:

scope.$apply(scope.hideTooltip()); 

但在调用函数动态不起作用:

scope.$apply(
    scope.$eval(attrs.ngEnter, {'event': event}) 
); 

HTML:

<input type="text" ng-model="value" ng-enter="hideToolTip()" /> 

的enitre指令:

app.directive('ngEnter', function() { 
      return function(scope, element, attrs) { 
       console.log(scope.hideTooltip()); 
       element.bind("keydown keypress", function(event) { 
        if(event.which === 13) { 
         console.log(attrs.ngEnter); 
         scope.$apply(
          scope.$eval(attrs.ngEnter, {'event': event}) 
         ); 
         event.preventDefault(); 
        } 
       }); 
      }; 
     }); 

那么,如何在AngularJS指令中动态调用函数呢?

+0

我认为你想要做的事情可以用隔离范围来完成:https://egghead.io/lessons/angularjs-isolate-scope-expression-binding –

+0

如果你是你可以使用'ng-model-options'使用角1.3这里是链接https://docs.angularjs.org/api/ng/directive/ngModelOptions –

回答

2

好像你已经错过了控制方法的参数在HTML

// you have missed the event parameter. 

<input type="text" ng-model="value" ng-enter="hideToolTip(event)" /> 

app.directive('ngEnter', function() { 
    return function(scope, element, attrs) { 

     element.bind("keydown keypress", function(event) { 
     if (event.which === 13) { 

      console.log(attrs.ngEnter); 
      scope.$apply(
      scope.$eval(attrs.ngEnter, { 
       'event': event 
      }) 
     ); 
      event.preventDefault(); 
     } 
     }); 
    }; 
    }); 

在控制器

$scope.hideToolTip = function(event) { 
    console.log(event); 
    } 

这里是DEMO

附:由于您绑定了​​和keypress事件,因此此操作会在触击ENTER后调用控制器功能两次。

AND别忘了删除console.log(scope.hideTooltip());行。

+1

就是这样。谢谢!是的,我正在传递事件参数,但控制器功能没有任何参数。奇怪的是,它没有触发一个方法未定义的异常。 – Floris

+1

:)很高兴能够帮助你,另外如果你想调用'console.log(scope.hideTooltip());'''''''''''''''''''''''console.log(scope.hideToolTip);',cheerz: ) –