我有一个我希望传递给指令的函数。然而,该指令在两个地方使用,并且在第一个地方,该函数采用两个参数,第二个地方只需要一个参数:
Function1(param1)
Function2(param1, param2)
我只能访问指令中的param1。如何修改Function2以使其返回Function1?我已经考虑过将Function2的实现更改为以下内容:
Function2(param2) {
return function(param1) {
//do something with param2
}
}
并将其传递给指令:
function="Function2(param2)"
但是,这会导致Angular摘要周期进入无限循环。我该如何解决这个问题?
答案 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)
丑陋,但有效。我确信有人可以提供更好的解决方案。