是否有正确的方法将非角度回调(最好是匿名函数)名称传递给指令,然后从指令中激活它。我的动机是从指令接口到遗留的非角度代码。
这是我想要的:
<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
}])