Parce que je pense que l'usine est un singleton, j'utilise le résultat http comme valeur de retour de l'usine. Comment puis-je attribuer une valeur initiale à l'usine avec $http lors de l'initialisation angulaire ? angular.module('some',[])
.factory('factory',function($http){
var some = {};
$http.get('url')
.success(function(resp){
some.data = resp;
})
return some.data;
})
Maintenant, c'est écrit comme ceci. J'espère que lorsqu'angular sera initialisé, il pourra prendre certaines valeurs du serveur et continuer à utiliser
Je crois que vous avez également découvert que le problème avec votre écriture est que l'acquisition de données est asynchrone.
some.data
Au début c'était encoreundefined
. Mais votre intuition est bonne : les données communes doivent être placées à l'intérieur defactory
ouservice
. Maintenant pour résoudre le problème asynchrone, il existe trois solutions :Convertir pour synchroniser. C'est la solution la plus directe. Les données requises sont directement restituées dans le modèle côté serveur
factory
obtient les données du HTML, généralement en utilisant la baliseinput
. Dans cette optique, une meilleure façon consiste à configurer les ressources avant de démarrer l’application Angular. Vous pouvez vous référer à cet article : http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1Rappel asynchrone. Utilisez
factory
pour renvoyer une fonction de rappel, comme ceci :Utilisez le mode Promesse/Différé pour un fonctionnement asynchrone. Alors que les projets deviennent de plus en plus complexes, Promise est la solution ultime. Angular fournit l'implémentation de ce modèle
$q
, qui est un service, et$http.get
renverra une instance Promise. Utilisé comme ceci :angulaire.run(fn)
angularjs $http ne prend pas en charge l'acquisition synchrone
Vous souhaitez initialiser ou afficher une réponse.write du backend vers le frontend
Ou utilisez le blocage ajax de jquery pour obtenir les données puis initialisez angulaire
Pour le routage, vous pouvez utiliser solve pour injecter le contrôleur
http://stackoverflow.com/questions/16286605/initialize-angularjs-servi...
Il existe des milliers de méthodes d'initialisation. La clé n'est pas de savoir si la valeur souhaitée est obtenue de manière synchrone ou asynchrone, mais où et quand l'utilisez-vous ? L'orientation vers l'objectif détermine la méthode que vous utilisez pour l'initialisation. Bien entendu, l’utilisation de promesses est recommandée dans la plupart des cas.