是否有正确的方法将非角度回调(最好是匿名函数)名称传递给指令,然后从指令激活它。我的动机是从指令到传统的非角度代码。
这就是我想要的:
<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来调用该方法,但在阅读后我明白这种方法是有问题的(安全性明智)。
任何建议都将不胜感激。
答案 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
}])