加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 07:38:59 所属栏目:安全 来源:网络整理
导读:我正在开发一个 angularjs应用程序作为我的角色学习的一部分.我有控制器,从那里我打电话给服务层. leagueManager.service("teamsService",function($http){ var teams = {}; $http.get('data/teams.json').then(function(data) { teams = data; }); this.get
我正在开发一个 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;
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读