У мене є директива форми, яка використовує вказаний 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 (консоль відкрита).
ng
API, наприклад ng-click="someFunction()"
, це вираз, який оцінює виконання функції.
$scope.callback
встановлено callback="someFunction"
атрибут та scope: { callback: '=' }
властивість об'єкта визначення директиви. $scope.callback
це функція, яку потрібно викликати пізніше. Фактичне значення атрибута , очевидно, є рядком - це завжди в HTML.