使用不同数量的参数将函数传递给角度指令

时间:2016-06-08 15:00:25

标签: javascript angularjs angularjs-directive

我有一个我希望传递给指令的函数。然而,该指令在两个地方使用,并且在第一个地方,该函数采用两个参数,第二个地方只需要一个参数:

Function1(param1)

Function2(param1, param2)  

我只能访问指令中的param1。如何修改Function2以使其返回Function1?我已经考虑过将Function2的实现更改为以下内容:

Function2(param2) { 
 return function(param1) {
    //do something with param2
 }

}

并将其传递给指令:

 function="Function2(param2)"

但是,这会导致Angular摘要周期进入无限循环。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先,我不会将函数用作属性名称,因为它是一个保留字。您可以在范围上添加另一个属性,例如:function-params="[param1, param2]"

所以元素看起来像这样:

<my-directive func="myFunction" function-params="[param1, param2]"></my-directive>

然后,在指令中,您将使用apply调用它:

angular.module('app').directive('myDirective', {
  ...
  scope: {
     func: '=',
     functionParams: '='
  },
  link: function(scope){
      scope.func.apply(null, scope.functionParams);
  }
});

答案 1 :(得分:0)

我通过使用一种解决方法解决了这个问题,我将param2传递到指令范围,以及一个布尔值,指示传递给指令的函数是Function1还是Function2。如果Function1调用传入的函数,让它调用pass_in_function,如下所示:

  passed_in_function(param1)

如果是功能2,请按以下方式调用:

 passed_in_function(param1, param2)

丑陋,但有效。我确信有人可以提供更好的解决方案。