L'obtention de données à partir d'un service web avec Angular.js
Im essayant d'obtenir des données dans un format Json à partir d'une distance à l'aide de WS Angulaire et im avoir quelques difficultés.
Les données proviennent du service web correctement mais je ne peux pas l'utiliser à l'intérieur du contrôleur.
Pourquoi est-ce?
Angulaire 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>
à l'aide d'un run de bloc? pourquoi pas un
Pourquoi devrais-je utiliser un service?
Vous pouvez utiliser un service, pour plusieurs raisons. Pour n'en nommer que quelques-uns, l'injection de dépendance, de modularité, maintenable, et fournit une couche d'abstraction. Ça dépend si. Si tout ce que vous allez jamais à faire est de recevoir une liste de tous les livres, puis un service est exagéré.
.service
qui renvoie une promesse? puis tout simplement inject
que le service dans votre controller(s)
.Pourquoi devrais-je utiliser un service?
Vous pouvez utiliser un service, pour plusieurs raisons. Pour n'en nommer que quelques-uns, l'injection de dépendance, de modularité, maintenable, et fournit une couche d'abstraction. Ça dépend si. Si tout ce que vous allez jamais à faire est de recevoir une liste de tous les livres, puis un service est exagéré.
OriginalL'auteur Vandervidi | 2015-06-03
Vous devez vous connecter pour publier un commentaire.
Créer le
bookJSON
sous forme de tableau, et de pousser les éléments au lieu d'affectation. Doncvar bookJSON=[];
À l'intérieur de
$http.get
nedata.forEach(function(item) { bookJSON.push(item); });
Le deuxième journal de la console affichera pas défini car, l'appel est asynchrone. La mission se passe dans le futur.
La
run
méthode ne garantit pas que le code est exécuté avant que le contrôleur de charge.Il y a d'autres moyens pour résoudre ce problème.
Éviter de variable globale. Regardez
$routeProvider
resolve
propriété.Ou de mettre en œuvre un service pour obtenir ces données à la promesse.
OriginalL'auteur Chandermani
Au lieu d'utiliser un run de bloc, vous pouvez utiliser votre $http service à l'intérieur de la manette, puis fixez vos données à la portée de tous comme d'habitude. Rappelez-vous juste pour injecter le $service http dans votre contrôleur.
OriginalL'auteur TonalLynx
OriginalL'auteur BERGUIGA Mohamed Amine