如何在指令中调用非角度回调

时间:2015-03-01 12:08:22

标签: angularjs callback directive

是否有正确的方法将非角度回调(最好是匿名函数)名称传递给指令,然后从指令激活它。我的动机是从指令到传统的非角度代码。

这就是我想要的:

<my-Directive callback="function (param) {some-legacy-function(param)}">

然后激活它:

app.directive('myDirective', function($scope) {
   return {
      scope: {
        callback: '&'
      }
      controller: function($scope) {
        $scope.someMethod = function() {
           $scope.callback($scope.param);
      }
   }
});

请注意,回调函数未在任何范围内定义,并且最好是匿名的(但我也可以使用非匿名函数进行管理)。

我发现其中一个是通过简单地传递一个字符串然后做一个eval来调用该方法,但在阅读后我明白这种方法是有问题的(安全性明智)。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以将遗留代码包装在可注射服务中,这样您就可以将其注入任何地方(并替换/模拟它以进行测试)

// here set on global for example
var legacyFunction=function(){};

//angular code (has to be loaded after your "old" script
myApp.factory('legacyFunction',function(){
   return legacyFunction;
})

//now it is available anywhere in you application (directives, controllers, etc) as an injectable -here in a controller so you can bind it to a $scope for example

myApp.controller('myController',['$scope', 'legacyFunction', function($scope, func){
    $scope.myFunc = func 
}])