Mam dyrektywę formularza, która używa określonego callbackatrybutu z izolowanym zakresem:
scope: { callback: '&' }
Znajduje się wewnątrz an, ng-repeatwięc wyrażenie, które przekazuję, zawiera idobiekt jako argument funkcji zwrotnej:
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
Kiedy skończyłem pracę z dyrektywą, wywołuje $scope.callback()ona funkcję kontrolera. W większości przypadków jest to w porządku i to wszystko, co chcę zrobić, ale czasami chciałbym dodać kolejny argument z directivesamego wnętrza .
Czy istnieje wyrażenie kątowe, które pozwoliłoby na to $scope.callback(arg2):, skutkując callbackwywołaniem z arguments = [item.id, arg2]?
Jeśli nie, jaki jest najlepszy sposób na zrobienie tego?
Odkryłem, że to działa:
<directive
ng-repeat = "item in stuff"
callback = "callback"
callback-arg="item.id"/>
Z
scope { callback: '=', callbackArg: '=' }
i wywołanie dyrektywy
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
Ale nie sądzę, że jest to szczególnie schludne i wymaga umieszczenia dodatkowych rzeczy w izolowanym zakresie.
Czy jest lepszy sposób?
Plunker zabaw tutaj (otwórz konsolę).
ngAPI, na przykład ng-click="someFunction()"jest wyrażeniem, którego wynikiem jest wykonanie funkcji.
$scope.callbackjest ustawiana przez callback="someFunction"atrybut i scope: { callback: '=' }właściwość obiektu definicji dyrektywy. $scope.callback jest funkcją, która zostanie wywołana w późniejszym terminie. Rzeczywista wartość atrybutu jest oczywiście ciągiem znaków - tak jest zawsze w przypadku HTML.