recherche

Maison  >  Questions et réponses  >  le corps du texte

angulaire.js - Sous angulaire, les données json distantes ne sont demandées qu'une seule fois et peuvent être utilisées dans plusieurs contrôleurs.

1.Objectif : Il est prévu que les données distantes (json.json) doivent être réutilisées. On espère que les données json.json ne seront demandées qu'une seule fois et pourront être utilisées à plusieurs reprises. plusieurs contrôleurs
2.Problème :Chaque fois que l'itinéraire saute, 'json.json' sera à nouveau demandé

3. Le code est le suivant
<script>

angular.module("myApp",[])
        .factory("$remoteData",['$http',function($http){
            return $http.get("../json/json.json").then(function(response){
                //获取 远程数据 服务
                //目的:期望该远程数据(json.json)需要重复利用,希望只请求一次json.json数据,可以在多个控制器中反复使用
                //问题:路由每跳转一次,就会重新请求一次'json.json'
                console.log(response.data);
                var myData = "";
                return myData = response.data;
            })
        }])
        .factory("$localData",function(){
            return {"name":"wenwu","age":"26"};
        })
        .controller("FirstController",function($scope,$remoteData,$localData){
                //远程请求的数据 --获取失败(如果这里能够获取json.json的数据,应该就成功了)
                $scope.remoteData = $remoteData;
                console.log('$scope.remoteData',$scope.remoteData);//返回 $scope.remoteData d {$$state: Object}
                console.log('$scope.remoteData.$$state.value',$scope.remoteData.$$state.value);//返回undefined

                //本地制作的数据 -- 获取成功
                $scope.localData = $localData;
                console.log($scope.localData);//返回 Object {name: "wenwu", age: "26"}
        })

</script>

巴扎黑巴扎黑2836 Il y a quelques jours582

répondre à tous(3)je répondrai

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-15 17:08:02

    Vous pouvez essayer ceci :

    factory("$remoteData",['$http', '$q', function($http, $q){
        var self = this;
        
        function getData() {
            if (self.myData) {
                return $q(function(resolve, reject) {
                    resolve(self.myData);
                });
            } else {
                return $http.get("../json/json.json").then(function(response){
                    self.myData = response.data;
                    return self.myData;
                });
            }
        }
        return {getData: getData}
    }]);
    

    Utilisez ceci dans le contrôleur :

    .controller("FirstController",function($scope,$remoteData,$localData){
        $remoteData.getData().then(function(myData) {
            //use myData
        });
    });

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-15 17:08:02

    Utilisez le service singleton, accrochez la référence de l'objet sur l'objet de service et récupérez cet objet directement plus tard

    répondre
    0
  • 怪我咯

    怪我咯2017-05-15 17:08:02

    Angular a la portée racine $rootScope. Vous pouvez conserver les données communes à chaque contrôleur dans la portée racine et les obtenir une seule fois via les méthodes appropriées.

    répondre
    0
  • Annulerrépondre