【发布时间】:2013-11-22 06:24:04
【问题描述】:
我有一个表单指令,它使用具有隔离范围的指定 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 playground here(打开控制台)。
【问题讨论】:
-
属性命名为“callback ="误导。它实际上是一个回调评估,而不是回调本身。
-
@DmitriZaitsev 这是一个回调角度表达式,将评估为 JavaScript 函数。我认为很明显它本身不是一个 JavaScript 函数。这只是偏好,但我宁愿不必用“-expression”作为我所有属性的后缀。这与
ngAPI 一致,例如ng-click="someFunction()"是一个计算结果为执行函数的表达式。 -
我从未见过名为“回调”的 Angular 表达式。它始终是您传递以被调用的函数,名称由此而来。你甚至在你的例子中使用了一个叫做“回调”的函数,让事情变得更加混乱。
-
我不确定你是困惑还是我。在我的示例中,
$scope.callback由指令定义对象的callback="someFunction"属性和scope: { callback: '=' }属性设置。$scope.callback是 以后调用的函数。实际的属性 value 显然是一个字符串 - HTML 总是如此。 -
您将属性和函数命名为相同 - “回调”。这就是混乱的秘诀。真的很容易避免。
标签: javascript angularjs angularjs-directive angularjs-scope