Ich bin ziemlich neu in der ganzen AngularJS-Welt und wie es funktioniert, aber ich kämpfe darum, dass es funktioniert wie erwartet. Ich weiß, dass es etwas damit zu tun hat, wie ich $http.get()
benutze und versuche, die Variablen meinem Controller zuzuordnen, aber ich kann es einfach nicht herausfinden.
Mit $scope
statt this
ich es bekommen kann arbeiten, aber wenn möglich, ich würde es vorziehen, zu verwenden this
so kann ich "Controller als"
-Code verwenden:
app.controller('ctrlSuppliers', function($http){
this.supplierList = {};
$http.get("http://some_url_here")
.success(function(response) { this.supplierList = response.records;})
.error(function() { this.supplierList = [{supplier_id: 0, supplier_name: 'Error Getting Details'}];});
});
Aus diesem Beispiel, ich kann dann nicht auf Ergebnisse von der $http.get
Anfrage innerhalb der supplierList
innerhalb der HTML-Seite zugreifen (dh zeigt keine Ergebnisse)
Ich weiß, wenn ich den Controller zu $scope
ändere, kann ich auf diese Daten zugreifen (obwohl nicht das gleiche Format wie oben verwendet), und ich weiß auch, dass die Daten mit console.log(this.supplierList)
innerhalb der .success
Aufruf aufgefüllt werden.
Ich weiß auch, dass der Grund, warum es nicht funktioniert, weil der Kontext von this
innerhalb des Controllers innerhalb der $http.get
Aufruf ändert.
Also meine Frage ist das: Wie erhalten Sie Zugriff auf die Ergebnisse von einem $ http.xxx Anruf mit this
anstelle von scope
? Ich habe ein paar verschiedene Quellen darüber gelesen, aber die meisten sprechen über die Verwendung von $scope
und verspricht. Ich habe keine solche Abdeckung mit this
gefunden (oder mit var supplier = this
deklariert). Jede Hilfe würde sehr geschätzt werden.
Danke,
Nur ein Heads-up, dass $ http Anrufe in der Regel nicht in Ihre Controller gehören! Extrahieren Sie sie stattdessen zu einem Dienst für Wiederverwendbarkeit, Stabilität und nicht-abhängige Abhängigkeitsinjektion. – Hypaethral
@GrumbleSnatch Danke dafür. Wie gesagt, ich habe gerade angefangen, Angular anzuschauen und habe noch nicht die Zeit gehabt, alle Funktionen und Funktionen durchzusehen, aber das Wissen darüber wird mir wahrscheinlich eine Menge Zeit ersparen, wenn ich sie schließlich entdeckt habe – Doug