Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ngResource/$resource.query()未加载数据_Javascript_Angularjs_Angular Resource_Angularjs Resource - Fatal编程技术网

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

Javascript ngResource/$resource.query()未加载数据,javascript,angularjs,angular-resource,angularjs-resource,Javascript,Angularjs,Angular Resource,Angularjs Resource,我已经构建了一个测试应用程序,与AngularJS教程中的一个非常相似,但有一个主要区别:它是用Yeoman初始化的 我的工厂代码如下所示: var deClashServices = angular.module('deClashServices', ['ngResource']); deClashServices.factory('Session', ['$resource', function ($resource) { return $resource('views/

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

我的工厂代码如下所示:

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

deClashServices.factory('Session', 
  ['$resource',
  function ($resource) {
    return $resource('views/sessions.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'
        ];
    }]
);
是的,angular-resource.js已添加到index.html。以及我的控制器和服务js文件。 是的,deClashServices已被列为ng应用程序的依赖项,如my 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'
        ];
    }]
);
main.html
下的
MainCtrl
中,
{{{awesomeThings}}
按预期生成3个字符串的数组。 但是
{{sessions}}
生成一个空数组

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

我的控制器是这样的:

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

deClashServices.factory('Session', 
  ['$resource',
  function ($resource) {
    return $resource('views/sessions.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'
        ];
    }]
);
这个代码有效。切换回JSON数组并尝试使用
.query.$promise.then(回调函数)
进行回调,但是,这不起作用

我现在很迷茫,因为AngularJS的教程代码具有几乎完全相同的结构

我怀疑我使用
.query()
的方式有问题,但同时角度教程也使用了同样的方式,因此没有问题

为了防止它超出我所展示的几个代码片段,在整个项目的代码中:

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

所以,如果你想对返回的数据做出反应,你必须使用回调函数,或者更好 使用$http服务,因为它返回承诺

看看这个

我还建议你看看