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



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

这是我想要的:

<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来调用该方法,但经过仔细阅读,我明白这种方法是有问题的(从安全角度来看)。

如有任何建议,我们将不胜感激。

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

// 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 
}])

最新更新