Вы также можете использовать сервис $ inject, чтобы получить любой сервис, который вам нравится. Я считаю это полезным, если я не знаю название службы заранее, но знаю интерфейс службы. Например, директива, которая вставит таблицу в конечную точку ngResource, или общая кнопка удаления записи, которая взаимодействует с любой конечной точкой API. Вы не хотите повторно реализовывать директиву table для каждого контроллера или источника данных.
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)
Теперь ваша анонимная услуга полностью доступна. Если это, например, ngResource, вы можете использовать стандартный интерфейс ngResource для получения ваших данных.
Например:
scope.apiService.query((response) ->
scope.data = response
, (errorResponse) ->
console.log "ERROR fetching data for service: #{attributes.apiService}"
console.log errorResponse.data
)
Я нашел эту технику очень полезной при создании элементов, особенно взаимодействующих с конечными точками API.