J'utilise des données provenant d'un service RESTful sur plusieurs pages. J'utilise donc des usines angulaires pour cela. Donc, je devais obtenir les données une fois du serveur, et chaque fois que j'obtiens les données avec ce service défini. Tout comme une variable globale. Voici l'exemple:
var myApp = angular.module('myservices', []);
myApp.factory('myService', function($http) {
$http({method:"GET", url:"/my/url"}).success(function(result){
return result;
});
});
Dans mon contrôleur, j'utilise ce service en tant que:
function myFunction($scope, myService) {
$scope.data = myService;
console.log("data.name"+$scope.data.name);
}
Son fonctionne bien pour moi selon mes exigences. Mais le problème ici est que lorsque je rechargerai ma page Web, le service sera à nouveau appelé et les demandes de serveur. Si entre une autre fonction s'exécute qui dépend du "service défini", cela donne l'erreur comme "quelque chose" est indéfini. Je veux donc attendre dans mon script que le service soit chargé. Comment puis je faire ça? Y a-t-il de toute façon cela dans angularjs?
la source
function myFunction($scope, myService) { var myDataPromise = myService.getData(); myDataPromise.then(function(result) { $scope.data = result; console.log("data.name"+$scope.data.name); }); console.log("This will get printed before data.name inside then. And I don't want that."); }
pour les nouveaux utilisateurs, vous pouvez également utiliser un rappel, par exemple:
A votre service:
Dans votre contrôleur:
la source
Pour info, cela utilise Angularfire donc cela peut varier un peu pour un service différent ou une autre utilisation mais devrait résoudre le même problème que $ http. J'ai eu ce même problème, la seule solution qui me convenait le mieux était de combiner tous les services / usines en une seule promesse sur la portée. Sur chaque route / vue qui nécessitait le chargement de ces services / etc, je mets toutes les fonctions qui nécessitent des données chargées dans la fonction du contrôleur, c'est-à-dire myfunct () et l'application principale.js en cours d'exécution après l'authentification je mets
et dans la vue que je viens de faire
dans le premier élément / élément de vue parent / wrapper pour que le contrôleur puisse tout exécuter à l'intérieur
sans vous soucier des promesses / commandes / problèmes de file d'attente asynchrones. J'espère que cela aide quelqu'un avec les mêmes problèmes que moi.
la source
J'avais le même problème et aucun si cela fonctionnait pour moi. Voici ce qui a fonctionné cependant ...
et puis la fonction qui l'utilise est ...
Le service n'est pas si nécessaire mais je pense que c'est une bonne pratique pour l'extensibilité. La plupart de ce dont vous aurez besoin pour un testament pour un autre, en particulier lors de l'utilisation d'API. Quoi qu'il en soit, j'espère que cela a été utile.
la source