AngularJS指令传递未知数量的函数

时间:2014-05-16 17:15:51

标签: javascript angularjs angularjs-directive

我理解在编写AngularJS指令时,可以使用"&"将父作用域中的函数绑定到指令作用域。在指令范围内如下:

...
scope: {
    functionNameInDirectiveScope: '&attributeName'
}
...

作为更大指令的一部分,我想要做的是将父作用域上定义的未知数量的函数传递给指令,作为按钮单击按钮执行的函数。例如,使用此HTML

...
<myDirective button1="function1" button2="function2" ... />
...

并使指令的输出类似于

...
<button ng-click="function1()" />
<button ng-click="function2()" />
...

单击按钮将实际运行父作用域函数。

我已经想出如何遍历属性并获取函数的名称,我只需要能够将它们绑定到按钮的ng-click属性。

似乎我想要的是能够手动,在指令的链接功能中,能够做&#34;&amp;&#34;的功能绑定。在指令定义的范围部分。

我希望这是有道理的。请问我是否解释得不够好,谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

为什么需要指令?

说清楚:

<button ng-repeat="functionPointer in functionPointers" ng-click="functionPointer" />

我自己没试过,但看起来它可以起作用。

答案 1 :(得分:0)

这是一种快速而肮脏的方式,可以按照您的建议采取您所要求的方式:

directive('myDirective', function($compile){
  return {
    restrict: 'E',
    link: function(scope, elem, attrs) {
      angular.forEach(attrs.$attr, function(func){
        var el = '<button ng-click="' + attrs[func] + '">' + func + '</button>';
        var compiled = $compile(el)(scope);
        elem.append(compiled);
      });
    }
  }
})

Working Plunker

...但我怀疑它是否是实现最终目标的最佳方法,因为它远离了Angular应用程序的声明性质。

如果您要解决这个问题,也许您可​​以更新您的问题或打开一个新问题,详细了解更大的指令。