Warum ist dieses Werk eine Rückkehr $$Status-Objekt statt der Antwort.Daten?
So, ich habe eine Sammlung von Objekten, die in den server will ich füllen Sie ein ng-repeat, wenn die Seite geladen wird.
Hatte ich gemacht eine Fabrik, die holte die Liste aus einer Ressource auf dem server, etwa so:
app.factory('objectArray', ['$http', function($http) {
//This is returning a $$state object
//instead of response.data...
return $http.post('/get_collection').then(function(response) {
console.log(response.data);
return response.data;
});
}]);
Ich habe dieser code funktioniert, bevor Sie bei der Verwendung von ui-router und die resolve-Eigenschaft in der Zustand Erklärung. Allerdings, wenn die Injektion dieser Fabrik direkt in mein controller, anstatt der Antwort.Daten, erhalte ich eine $$ - state-Objekt.
Mein controller sieht wie folgt aus:
app.controller('applicationController', ['$scope', 'objectArray', function($scope, objectArray) {
$scope.array = objectArray;
console.log($scope.array);
}]);
- Möglich, Duplikat der Wie gebe ich die Antwort eines asynchronen Aufruf?; (siehe das doppelte aswell)
- Ich bin am meisten interessiert, warum das funktioniert in angular-ui-router ohne zusätzlichen code, aber in diesem Fall gibt es {$$state:object}
- Ich bin mir nicht sicher, aber Sie kann nicht zurückkehren-Werte von
Promise.then
. War dein Ansatz so etwas wie dieser?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was den $http-Dienst zurückgibt (und damit die
objectArray
service) genannt ist ein Versprechen. Sie können den Zugriff auf die eigentlichen Daten, die durch die Registrierung einer callback-Funktion, die aufgerufen wird,, wenn die Daten verfügbar sind,, d.h. wenn die Antwort auf die http-Anforderung stammt wieder vom server:Der Grund, warum Sie direkt Zugriff auf die Daten haben bei der Verwendung von resolve ist, dass der router, wenn die resolve-Funktion gibt ein Versprechen, wartet auf das Versprechen gelöst zu werden. Und nur dann, wird es extrahiert die Daten von der Verheißung und speist die Daten in den controller.
Besser zu verstehen, verspricht Sie Lesen konnte die folgenden Artikel (und seine Fortsetzung).
Als @JB Nizet bemerkt, dass du code in Ordnung ist, nur lösen, in controller
Hier arbeiten demo
JS:
HTML:
Fehler
$$Staat das problem war.
die LÖSUNG: eckig.kopieren
Daumen hoch!.. =)