Abrufen von Daten aus einem web-service mit Angular.js
Ich versuche, um Daten in einem Json-format von einem remote-WS mit Winkel-und ich habe einige Schwierigkeiten.
Die Daten stammen aus der web-service korrekt, aber ich kann nicht verwenden es im controller.
Warum ist das so?
Angular Code:
var booksJson;
var app = angular.module('booksInventoryApp',[]);
//get data from the WS
app.run(function ($http) {
$http.get("https://SOME_API_PATH").success(function (data) {
booksJson = data;
console.log(data); //Working
});
});
app.controller('booksCtrl', function ($scope) {
$scope.data = booksJson;
console.log($scope.data); //NOT WORKING
});
HTML:
<section ng-controller="booksCtrl">
<h2 ng-repeat="book in data">{{book.name}}</h2>
</section>
über einen run-block? warum nicht ein
Warum sollte ich einen service?
Verwenden Sie einen service für viele Gründe. Um ein paar zu nennen, dependency injection, modular, wartbar, und bietet eine Ebene der Abstraktion. Es hängt allerdings. Wenn alles, was Sie jemals tun ist, erhalten Sie eine Liste aller Bücher, die dann ein service-overkill.
.service
gibt ein Versprechen? dann einfach inject
dass service in Ihrem controller(s)
.Warum sollte ich einen service?
Verwenden Sie einen service für viele Gründe. Um ein paar zu nennen, dependency injection, modular, wartbar, und bietet eine Ebene der Abstraktion. Es hängt allerdings. Wenn alles, was Sie jemals tun ist, erhalten Sie eine Liste aller Bücher, die dann ein service-overkill.
InformationsquelleAutor Vandervidi | 2015-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen der
bookJSON
als array, und drücken Sie die Elemente anstelle der Abtretung. Sovar bookJSON=[];
Innen
$http.get
tundata.forEach(function(item) { bookJSON.push(item); });
Zweiten Konsole zeigen wird unbestimmt, weil der Anruf ist async. Die Zuordnung geschieht in der Zukunft.
Den
run
Methode nicht garantieren, dass der code ausgeführt wird, bevor der controller lädt.Gibt es andere Wege, dieses Problem zu lösen.
Vermeiden Sie Globale Variablen. Blick auf
$routeProvider
resolve
Eigenschaft.Oder einen service implementiert, um diese Daten abrufen, als Versprechen.
InformationsquelleAutor Chandermani
Statt mit einem run block, den Sie verwenden können, Ihre $http-service in die controller, fügen Sie dann Ihre Daten in dem Umfang, wie normal. Denken Sie nur daran, um zu injizieren, der $http-service in den controller.
InformationsquelleAutor TonalLynx
InformationsquelleAutor BERGUIGA Mohamed Amine