Mam dyrektywę formularza, która używa określonego callback
atrybutu z izolowanym zakresem:
scope: { callback: '&' }
Znajduje się wewnątrz an, ng-repeat
więc wyrażenie, które przekazuję, zawiera id
obiekt 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 directive
samego wnętrza .
Czy istnieje wyrażenie kątowe, które pozwoliłoby na to $scope.callback(arg2)
:, skutkując callback
wywoł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ę).
ng
API, na przykład ng-click="someFunction()"
jest wyrażeniem, którego wynikiem jest wykonanie funkcji.
$scope.callback
jest 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.