angulaire.js - Comment attribuer $http à la valeur initiale de Factory lors de l'initialisation angulaire
phpcn_u1582
phpcn_u1582 2017-05-15 16:54:00
0
4
766

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

.
phpcn_u1582
phpcn_u1582

répondre à tous(4)
習慣沉默

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.dataAu début c'était encore undefined. Mais votre intuition est bonne : les données communes doivent être placées à l'intérieur de factory ou service. Maintenant pour résoudre le problème asynchrone, il existe trois solutions :

  1. 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 balise input. 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#1

  2. Rappel asynchrone. Utilisez factory pour renvoyer une fonction de rappel, comme ceci :

    javascriptxxx.factory('some', function($http){
        var some = {}
        function get(cb){       
            if(some.data) return cb(some.data);     
            $http.get('').success(function(d){
                cb(some.data = d);
            });
        }
        return get;
    });
    ...
    some.get(function(data){
        console.log(data);
    });
    
  3. 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 :

    javascriptxxx.factory('some', function($q, $http){
        return $http.get('');
    });    
    ...
    some.success(function(data){
        console.log(data);
    });
    
给我你的怀抱

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...

PHPzhong

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal