我理解在编写AngularJS指令时,可以使用"&"将父作用域中的函数绑定到指令作用域。在指令范围内如下:
...
scope: {
functionNameInDirectiveScope: '&attributeName'
}
...
作为更大指令的一部分,我想要做的是将父作用域上定义的未知数量的函数传递给指令,作为按钮单击按钮执行的函数。例如,使用此HTML
...
<myDirective button1="function1" button2="function2" ... />
...
并使指令的输出类似于
...
<button ng-click="function1()" />
<button ng-click="function2()" />
...
单击按钮将实际运行父作用域函数。
我已经想出如何遍历属性并获取函数的名称,我只需要能够将它们绑定到按钮的ng-click属性。
似乎我想要的是能够手动,在指令的链接功能中,能够做&#34;&amp;&#34;的功能绑定。在指令定义的范围部分。
我希望这是有道理的。请问我是否解释得不够好,谢谢你的帮助。
答案 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);
});
}
}
})
...但我怀疑它是否是实现最终目标的最佳方法,因为它远离了Angular应用程序的声明性质。
如果您要解决这个问题,也许您可以更新您的问题或打开一个新问题,详细了解更大的指令。