ngResource / $ resource .query()不加载数据

时间:2014-01-25 10:48:52

标签: javascript angularjs angular-resource angularjs-resource

我已经构建了一个非常类似于AngularJS教程的测试应用程序,有一个主要区别:它是用Yeoman初始化的。

我的工厂代码如下所示:

var deClashServices = angular.module('deClashServices', ['ngResource']);

deClashServices.factory('Session', 
  ['$resource',
  function ($resource) {
    return $resource('views/sessions.json');
  }]
);

是的,angular-resource.js已添加到index.html。以及我的Controller和Service js文件。 是的,deClashServices已被列为ng-app的依赖项,如我的app.js中所示:

var declashAngularApp = angular.module('declashAngularApp', [
  'ngRoute',

  'deClashServices',
  'deClashControllers'
]);

declashAngularApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .when('/sessions', {
        templateUrl: 'views/sessions.html',
        controller: 'SessionListCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  }]);

这是我的控制器:

var deClashControllers = angular.module('deClashControllers', []);

deClashControllers.controller('MainCtrl', 
    ['$scope', 'Session', 
    function ($scope, Session) {
        $scope.sessions = Session.query();
        $scope.awesomeThings = [
          'HTML5 Boilerplate',
          'AngularJS',
          'Karma'
        ];
    }]
);
<{1}}中的

位于main.html下,MainCtrl生成3个字符串的数组,如预期的那样。 但是{{awesomeThings}}会生成一个空数组。

为了确定它是.query()没有加载它,我尝试使用带有简单JSON文件的工厂:{{sessions}}

{"sessions":"number1"}

我的控制器是这样的:

deClashServices.factory('Session', 
  ['$resource',
  function ($resource) {
    return $resource('views/simple.json');
  }]
);

此代码有效。然而,切换回JSON数组并尝试使用deClashControllers.controller('MainCtrl', ['$scope', 'Session', function ($scope, Session) { $scope.sessions = {}; Session.get(function(response) { $scope.sessions = response.sessions; }); $scope.awesomeThings = [ 'HTML5 Boilerplate', 'AngularJS', 'Karma' ]; }] ); 进行回调不起作用。

我现在非常迷茫和困惑,因为AngularJS的教程代码几乎完全相同的结构。

我怀疑我使用.query.$promise.then(callback-function)的方式有问题,但同时Angular Tutorial使用相同的方式,并且没有问题。

以防它可能在我已经显示的几个代码片段之外,这里是整个项目的代码: github

1 个答案:

答案 0 :(得分:0)

Angular的资源服务并没有回报承诺。它返回一个空对象,以便当请求从服务器返回时,资源服务可以使用获取的数据填充该对象,因为它具有对该对象的引用。

因此,如果您想对返回的数据作出反应,您必须使用回调函数或更好 使用$ http-service,因为它返回了promise。

看看这个plkr

我还建议您查看Restangular