2015-10-21 58 views
0

我有以下代码(从书角向上和运行):

angular.module('fifaApp') 

    .controller('TeamListCtrl', ['FifaService', 
    function(FifaService) { 
     var self = this; 
     self.teams = []; 

     FifaService.getTeams().then(function(resp) { 
     self.teams = resp.data; 
     }); 
    }]) 

    .factory('FifaService', ['$http', 
    function($http) { 
     return { 
     getTeams: function() { 
      return $http.get('/api/team'); 
     }, 

     getTeamDetails: function(code) { 
      return $http.get('/api/team/' + code); 
     } 
     } 
    }]) 

    .config(function($routeProvider) { 
    $routeProvider.when('/', { 
     templateUrl: 'views/team_list.html', 
     controller: 'TeamListCtrl as teamListCtrl' 
    }); 
    }); 

然后在服务器上:

app.get('/api/team', function(req, res) { 
    res.send(FIFA.TEAMS_LIST); 
}); 

我试着以这种方式重写它,使用$resource,但它不显示templateUrlviews/team_list.html

我的解决办法:

angular.module('fifaApp','ngResource') 

    .controller('TeamListCtrl', ['FifaService', 
    function(FifaService) { 
     var self = this; 
     self.teams = []; 

     FifaService.query().$promise 
     .then(function(resp) { 
     self.teams = resp.data; 
     }); 
    }]) 
//`$resource` now instead of `$http` 
    .factory('FifaService', ['$resource', 
    function($resource) { 
     return $resource('/api/team'); 
    }]) 

    .config(function($routeProvider) { 
    $routeProvider.when('/', { 
     templateUrl: 'views/team_list.html', 
     controller: 'TeamListCtrl as teamListCtrl' 
    }); 
    }); 

为什么我看不到views/team_list.html? 问候

<div class="team-list-container"> 
    <div class="team" 
     ng-repeat="team in teamListCtrl.teams | orderBy: 'rank'"> 
    <div class="team-info row"> 
     <div class="col-lg-1 rank"> 
      <span ng-bind="team.rank"></span> 
     </div> 
     <div class="col-sm-3"> 
     <img ng-src="{{team.flagUrl}}" class="flag"> 
     </div> 
     <div class="col-lg-6 name"> 
     <a title="Image Courtesy: Wikipedia" 
      ng-href="#/team/{{team.code}}" 
      ng-bind="team.name" 
      style="color: cadetblue;"></a> 
     </div> 
    </div> 
    </div> 
</div> 

回答

1

试试这个。

FifaService.query() 
    .success(function(resp) { 
    self.teams = resp.data; 

或删除$ promise并仍然使用.then。

+0

为什么要移除'$ promise'? var User = $ resource('/ user /:userId',{userId:'@ id'}); (函数(用户){0} {0}} {scope.user = user; });用户.get({userId:123}) 。$ promise.then作品例如。来自Angular文档。 – user1665355

+0

也许你的意思是$ q.defer()。我从来没有见过使用$ promise,甚至用google搜索它回到$ q。 – venturz909

+0

好吧,看看这个答案,例如http://stackoverflow.com/questions/19490560/angularjs-resource-promise或https://docs.angularjs.org/api/ngResource/service/$resource – user1665355

0

尝试这样的事情从here

angular.module('job.models', []) 
    .factory('Job', ['$resource', function($resource) { 
     var Job = $resource('/api/jobs/:jobId', { full: 'true', jobId: '@id' }, { 
      query: { 
       method: 'GET', 
       isArray: false, 
       transformResponse: function(data, header) { 
        var wrapped = angular.fromJson(data); 
        angular.forEach(wrapped.items, function(item, idx) { 
         wrapped.items[idx] = new Job(item); 
        }); 
        return wrapped; 
       } 
      } 
     }); 

     Job.prototype.getResult = function() { 
      if (this.status == 'complete') { 
       if (this.passed === null) return "Finished"; 
       else if (this.passed === true) return "Pass"; 
       else if (this.passed === false) return "Fail"; 
      } 
      else return "Running"; 
     }; 

     return Job; 
    }]); 
+0

好吧,似乎上述解决方案是不必要的复杂:)并不回答我的问题。 – user1665355