Możesz również skorzystać z usługi $ inject, aby uzyskać dowolną usługę. Uważam, że jest to przydatne, jeśli nie znam nazwy usługi z wyprzedzeniem, ale znam interfejs usługi. Na przykład dyrektywa, która będzie podłączać tabelę do punktu końcowego ngResource lub ogólnego przycisku kasowania rekordów, który współdziała z dowolnym punktem końcowym interfejsu API. Nie chcesz ponownie implementować dyrektywy table dla każdego kontrolera lub źródła danych.
template.html
<div my-directive api-service='ServiceName'></div>
my-directive.directive.coffee
angular.module 'my.module'
.factory 'myDirective', ($injector) ->
directive =
restrict: 'A'
link: (scope, element, attributes) ->
scope.apiService = $injector.get(attributes.apiService)
teraz twój 'anonimowy' usługa jest w pełni dostępny. Jeśli jest ngResource na przykład można użyć standardowego interfejsu ngResource, aby uzyskać dane
Na przykład:
scope.apiService.query((response) ->
scope.data = response
, (errorResponse) ->
console.log "ERROR fetching data for service: #{attributes.apiService}"
console.log errorResponse.data
)
Znalazłem tę technikę, aby być bardzo przydatna przy wykonywaniu elementów, które współdziałają z punktami końcowymi API zwłaszcza .
Myślę, że jest to lepsze rozwiązanie, ponieważ działa nawet po zminimalizowaniu kodu. – czerasz
Musiałem dodać "_myData = myData" przed zwróceniem {}, a następnie odwołać się do obiektu jako _myData wewnątrz funkcji łącza. – Jelling
Dzięki @Jelling. Musiałem zrobić to samo. Zastanawiam się, czy ktoś tam może nam powiedzieć, dlaczego ...? – sfletche