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