У меня есть директива формы, которая использует указанный 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]) );
Но я не думаю, что это особенно опрятно и включает в себя добавление дополнительных вещей в область видимости.
Есть ли способ лучше?
Здесь есть плункерная площадка (консоль открыта).
ngAPI, например, ng-click="someFunction()"является выражением, которое оценивает выполнение функции.
$scope.callbackустанавливается callback="someFunction"атрибут и scope: { callback: '=' }свойство объекта определения директивы. $scope.callback это функция будет называться на более поздний срок. Фактическое значение атрибута, очевидно, является строкой - это всегда имеет место с HTML.