AngularJS-Dienste (Service)
In AngularJS können Sie Ihre eigenen Dienste erstellen oder integrierte Dienste verwenden.
Was ist ein Service?
In AngularJS ist ein Service eine Funktion oder ein Objekt, die bzw. das in deiner AngularJS-Anwendung verwendet werden kann.
AngularJS hat mehr als 30 integrierte Services.
Es gibt den$locationService, der die URL-Adresse der aktuellen Seite zurückgeben kann.
Beispiel
app.controller('customersCtrl', function($scope, $location) {
$scope.myUrl = $location.absUrl();
});
Ausprobieren »
Hinweis$locationEin Service wird als Parameter an den Controller übergeben. Um ihn zu verwenden, musst du ihn im Controller definieren.
Warum Services verwenden?
Unter vielen Services, wie dem $location-Service, kann er im DOM vorhandene Objekte verwenden, ähnlich wie das window.location-Objekt, allerdings hat das window.location-Objekt in AngularJS-Anwendungen gewisse Einschränkungen.
AngularJS überwacht die Anwendung ständig und verarbeitet Event-Änderungen. AngularJS verwendet lieber$locationServices anstelle vonwindow.locationObjekten, was besser ist.
$location vs window.location
| window.location | $location.service | |
|---|---|---|
| Zweck | Ermöglicht Lese- und Schreibvorgänge am aktuellen Browser-Speicherort | Ermöglicht Lese- und Schreibvorgänge am aktuellen Browser-Speicherort |
| API | Stellt ein Objekt bereit, das gelesen und beschrieben werden kann | Stellt einen Reader/Writer im jQuery-Stil bereit |
| Ob in den Anwendungslebenszyklus von AngularJS integriert | nein | Kann auf jede Phase im Anwendungslebenszyklus zugreifen und ist mit $watch integriert |
| Ob nahtlos in die HTML5-API integriert | nein | Ja (mit sanftem Rückfall (Graceful Degradation) für ältere Browser) |
| Ob auf den Anwendungskontext bezogen | Nein, window.location.path gibt "/docroot/actual/path" zurück | Ja, $location.path() gibt "/actual/path" zurück |
$http Service
$httpDies ist der am häufigsten verwendete Service in AngularJS-Anwendungen. Der Service sendet Anfragen an den Server, und die Anwendung reagiert auf die vom Server übertragenen Daten.
Beispiel
Verwende den$httpService, um Daten vom Server anzufordern:
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm").then(function (response) {
$scope.myWelcome = response.data;
});
});
Ausprobieren »
Das Obige ist ein sehr einfaches$httpService-Beispiel. Für weitere$httpService-Anwendungen siehe dasAngularJS Http Tutorial。
$timeout Service
Der AngularJS $timeoutService entspricht der JS window.setTimeoutFunktion.
Beispiel
Informationen nach zwei Sekunden anzeigen:
app.controller('myCtrl', function($scope, $timeout) {
$scope.myHeader = "Hello World!";
$timeout(function () {
$scope.myHeader = "How are you today?";
}, 2000);
});
Ausprobieren »
$interval Service
Der AngularJS $intervalService entspricht der JSwindow.setIntervalFunktion.
Beispiel
Informationen jede Sekunde anzeigen:
app.controller('myCtrl', function($scope, $interval) {
$scope.theTime = new Date().toLocaleTimeString();
$interval(function () {
$scope.theTime = new Date().toLocaleTimeString();
}, 1000);
});
Ausprobieren »
Erstellen eines benutzerdefinierten Services
Du kannst einen benutzerdefinierten Service erstellen und ihn mit deinem Modul verknüpfen:
Einen Service namenshexafyerstellen:
this.myFunc = function (x) {
return x.toString(16);
}
});
Um einen benutzerdefinierten Service zu verwenden, musst du ihn beim Definieren des Controllers separat hinzufügen und die Abhängigkeit festlegen:
Beispiel
Benutzerdefinierten Servicehexafyverwenden, um eine Zahl in eine hexadezimale Zahl zu konvertieren:
$scope.hex = hexafy.myFunc(255);
});
Ausprobieren »
Verwenden eines benutzerdefinierten Services in einem Filter
Sobald du einen benutzerdefinierten Service erstellt und mit deiner Anwendung verbunden hast, kannst du ihn in Controllern, Direktiven, Filtern oder anderen Services verwenden.
Im FiltermyFormatden Servicehexafy:
return function(x) {
return hexafy.myFunc(x);
};
}]);
Selbst ausprobieren »
Beim Abrufen von Werten in einem Array von Objekten kannst du Filter verwenden:
Einen Service erstellenhexafy:
<li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>
Selbst ausprobieren »