Sie können auch den $ inj-Service verwenden, um den gewünschten Service zu erhalten. Ich finde das nützlich, wenn ich den Dienstnamen nicht im Voraus kenne, aber die Dienstschnittstelle kenne. Zum Beispiel eine Direktive, die eine Tabelle in einen ngResource-Endpunkt einfügt, oder eine generische Schaltfläche zum Löschen von Datensätzen, die mit einem beliebigen API-Endpunkt interagiert. Sie möchten die Tabellenanweisung nicht für jeden Controller oder jede Datenquelle erneut implementieren.
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)
Jetzt ist Ihr "anonymer" Dienst vollständig verfügbar. Wenn es sich beispielsweise um ngResource handelt, können Sie die Standardschnittstelle ngResource verwenden, um Ihre Daten abzurufen
Beispielsweise:
scope.apiService.query((response) ->
scope.data = response
, (errorResponse) ->
console.log "ERROR fetching data for service: #{attributes.apiService}"
console.log errorResponse.data
)
Ich habe festgestellt, dass diese Technik sehr nützlich ist, wenn Elemente erstellt werden, die insbesondere mit API-Endpunkten interagieren.