angularjs $http.get让json在服务层不工作
我正在开发一个
angularjs应用程序作为我的角色学习的一部分.我有控制器,从那里我打电话给服务层.
leagueManager.service("teamsService",function($http){ var teams = {}; $http.get('data/teams.json').then(function(data) { teams = data; }); this.getTeams = function(){ return teams; }; }); 我注意到,由于$http.get.then的异步性质,数据没有立即检索,因此当我从控制器(teamsController)调用getTeams()时,我不会得到“团队”,我会得到没有. 任何想法如何解决这个问题? 二次尝试: 我的控制器teamController.js leagueManager.controller('teamsController',function($scope,$location,teamsService,$routeParams){ //init function to initialize data when controller is called everytime. var init = function(){ $scope.teams = []; var promise = teamsService.getTeams(); promise.then( function(data){ console.log("teams after promise:="+data); $scope.teams = data; },function(reason) { alert('Failed: ' + reason); } ); console.log("teams in the scope:="+$scope.teams); }; init(); }); 这里是我的ServiceLayer teamsService.js leagueManager.service("teamsService",function($http,$q){ this.getTeams = function(){ var deferred = $q.defer(); var url = 'data/teams.json'; $http.get(url).success(function(data,status) { // Some extra manipulation on data if you want... deferred.resolve(data); }).error(function(data,status) { deferred.reject(data); }); return deferred.promise; } }); 你能帮助我吗我做错了什么?
这只是表明我确实得到了json对象,但并不是在我想要的时候.由于某种原因,这种沮丧/承诺的事情没有影响. 请帮助这个新的角质量
是的,您将需要使用承诺界面.因此,您不必返回团队对象,您必须退回承诺:
承诺资源: > http://egghead.io/lessons/angularjs-promises 在服务中: leagueManager.service("teamsService",function($http){ var deferred = $q.defer(); $http.get('data/teams.json').then(function(data) { deferred.resolve(data); }); this.getTeams = function(){ return deferred.promise; }; }); 然后在控制器中: $scope.team = {}; var promise = teamsService.getTeams(); promise.then(function(data) { $scope.teams = data; }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |