Ich habe diesen Artikel gelesen: http://eviltrout.com/2013/06/15/ember-vs-angular.html
Und es sagte:
Aufgrund fehlender Konventionen frage ich mich, wie viele Angular-Projekte auf schlechten Praktiken wie AJAX-Aufrufen direkt in Controllern beruhen. Fügen Entwickler aufgrund der Abhängigkeitsinjektion Router-Parameter in Direktiven ein? Werden unerfahrene AngularJS-Entwickler ihren Code so strukturieren, dass ein erfahrener AngularJS-Entwickler dies für idiomatisch hält?
Ich $http
telefoniere gerade von meinem Angular.js-Controller. Warum ist es eine schlechte Praxis? Was ist dann die beste Vorgehensweise zum $http
Telefonieren? und warum?
Antworten:
EDIT: Diese Antwort konzentrierte sich hauptsächlich auf Version 1.0.X. Um Verwirrung zu vermeiden, wird es geändert, um die beste Antwort für ALLE aktuellen Versionen von Angular ab dem heutigen 05.12.2013 wiederzugeben.
Die Idee ist, einen Service zu erstellen, der ein Versprechen an die zurückgegebenen Daten zurückgibt, dieses dann in Ihrem Controller aufzurufen und das Versprechen dort zu verarbeiten, um Ihre $ scope-Eigenschaft zu füllen.
Der Service
Der Controller:
Behandeln Sie die
then()
Methode des Versprechens und holen Sie die Daten heraus. Legen Sie die Eigenschaft $ scope fest und tun Sie alles, was Sie sonst noch tun müssen.In-View Promise Resolution (nur 1.0.X):
In Angular 1.0.X, dem Ziel der ursprünglichen Antwort, werden Versprechen von View besonders behandelt. Wenn sie aufgelöst werden, wird ihr aufgelöster Wert an die Ansicht gebunden. Dies wurde in 1.2.X veraltet
quelle
$scope.foos
Eigenschaft in einer Vorlage verwenden. Wenn Sie dieselbe Eigenschaft außerhalb einer Vorlage verwenden (z. B. in einer anderen Funktion), ist das dort gespeicherte Objekt immer noch ein Versprechungsobjekt..then()
das Versprechen einhalten und den Wert in den Bereich $ setzen ...myService.getFoos().then(function(value) { $scope.foos = value; });
Die beste Vorgehensweise besteht darin, den
$http
Aufruf in einen "Dienst" zu abstrahieren, der Ihrem Controller Daten bereitstellt:Abstraktion der
$http
Aufruf so , können Sie diesen Code auf mehreren Controllern wiederverwenden. Dies ist erforderlich, wenn der Code, der mit diesen Daten interagiert, komplexer wird. Möglicherweise möchten Sie die Daten verarbeiten, bevor Sie sie in Ihrem Controller verwenden, und das Ergebnis dieses Prozesses zwischenspeichern, damit Sie keine Zeit für die erneute Verarbeitung aufwenden müssen.Sie sollten sich den "Dienst" als Darstellung (oder Modell) von Daten vorstellen, die Ihre Anwendung verwenden kann.
quelle
Die akzeptierte Antwort gab mir den
$http is not defined
Fehler, also musste ich dies tun:Der Hauptunterschied ist diese Linie:
quelle
Ich habe eine Antwort für jemanden gegeben, der einen völlig generischen Webdienst in Angular haben möchte. Ich würde empfehlen, es einfach anzuschließen, und es kümmert sich um alle Ihre Web-Service-Anrufe, ohne dass Sie alle selbst codieren müssen. Die Antwort ist hier:
https://stackoverflow.com/a/38958644/5349719
quelle