【问题标题】:How to call a non-angular callback within a directive如何在指令中调用非角度回调
【发布时间】:2015-03-01 12:08:21
【问题描述】:

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

这就是我想要的:

<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 来调用该方法,但在阅读之后我了解到这种方法是有问题的(安全方面)。

任何建议将不胜感激。

【问题讨论】:

  • 表达式总是在作用域上计算。为什么在 HTML 视图中有这个 JS 代码而不是控制器代码?

标签: angularjs callback directive


【解决方案1】:

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

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

【讨论】:

  • factoryangular.module 的方法,而不是angular 对象。
猜你喜欢
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多