我有一个form指令,它使用callback带有隔离范围的指定属性:
callback
scope: { callback: '&' }
它位于一个内部,ng-repeat因此我传递的表达式包括id该对象的作为回调函数的参数:
ng-repeat
id
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
完成指令后,它会$scope.callback()从其控制器函数中调用。在大多数情况下,这很好,这就是我想要做的,但是有时我想从directive自身内部添加另一个参数。
$scope.callback()
directive
是否有一个允许这样的角度表达式:$scope.callback(arg2),导致用callback调用arguments = [item.id, arg2]?
$scope.callback(arg2)
arguments = [item.id, arg2]
如果没有,最整洁的方法是什么?
我发现这可行:
<directive ng-repeat = "item in stuff" callback = "callback" callback-arg="item.id"/>
用
scope { callback: '=', callbackArg: '=' }
和指令调用
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
但是我认为这不是特别整洁,它涉及在隔离范围内放入额外的内容。
有没有更好的办法?
此处为Plunker游乐场(已打开控制台)。
如果您声明@ lex82提到的回调,例如
callback = "callback(item.id, arg2)"
您可以使用对象映射在指令范围内调用回调方法,它将正确执行绑定。喜欢
scope.callback({arg2:"some value"});
无需$ parse。看到我的小提琴(控制台日志)http://jsfiddle.net/k7czc/2/
更新 :文档中有一个小例子:
&或&attr- 提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给定和小部件的作用域定义:{localFn:’&myAttr’},然后隔离作用域属性localFn将指向count = count + value表达式的函数包装。通常希望通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn中来完成。 例如,如果表达式为增量(金额),则可以通过将localFn调用为localFn({amount:22})来指定金额值。