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