angularjs $http.get让json在服务层不工作

前端之家收集整理的这篇文章主要介绍了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;
}
});

你能帮助我吗我做错了什么?
这是执行时在浏览器控制台中打印的内容

teams in the scope:= teamsController.js:27

teams after promise:=[object Object],[object Object],[object Object]

这只是表明我确实得到了json对象,但并不是在我想要的时候.由于某种原因,这种沮丧/承诺的事情没有影响.

请帮助这个新的角质量

是的,您将需要使用承诺界面.因此,您不必返回团队对象,您必须退回承诺:

承诺资源:

> http://egghead.io/lessons/angularjs-promises
> http://docs.angularjs.org/api/ng.$q

在服务中:

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;
});

猜你在找的Angularjs相关文章