一尘不染

角度指令可以将参数传递给指令属性中指定的表达式中的函数吗?

angularjs

我有一个form指令,它使用callback带有隔离范围的指定属性:

scope: { callback: '&' }

它位于一个内部,ng-repeat因此我传递的表达式包括id该对象的作为回调函数的参数:

<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>

完成指令后,它会$scope.callback()从其控制器函数中调用。在大多数情况下,这很好,这就是我想要做的,但是有时我想从directive自身内部添加另一个参数。

是否有一个允许这样的角度表达式:$scope.callback(arg2),导致用callback调用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游乐场(已打开控制台)。


阅读 217

收藏
2020-07-04

共1个答案

一尘不染

如果您声明@ 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})来指定金额值。

2020-07-04