模块工厂不返回数据

时间:2013-07-03 05:13:25

标签: angularjs

我正在尝试从服务器读取JSON回复。你可以在这里找到我的代码。 https://github.com/ameyjah/feeder

在firefox firebug中,我可以看到服务器已经返回JSON回复,但是当我将其存储到$ scope.variable时,我无法访问该信息。

模块代码 var res

angular.module('myApp.services', ['ngResource'])
    .factory('feedFetcher', ['$resource',
        function($resource) {
            var actions = {
                'sites': {method:'GET', params: { action:"sites"} ,isArray:false},                           
                'feeds': {method:'GET', params: { action:"sites"} ,isArray:false}
            }
            res = $resource('/api/:action', {}, actions);
            return res
        }
    ]);

控制器代码

$scope.sites = feedFetcher.sites().sites;
console.log($scope.sites);

在firebug中看到的回复:

{
  "sites": [
    {
      "id": 0,
      "title": "google"
    },
    {
      "id": 1,
      "title": "yahoo"
    }
  ]
}

我认为我搞砸了我应该定义工厂的方式,但我无法识别。任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:1)

当你调用sites()时,它会返回一个空对象并启动一个AJAX请求,该请求将填充该对象上的“sites”属性。我认为你应该这样使用它:

$scope.results = feedFetcher.sites();
console.log($scope.results.sites); // will be undefined as AJAX not complete

然后在你的html中你可以使用结果,它们将在AJAX完成时填写,或者注意它:

$scope.$watch('results.sites', function() {
    // this will be called twice, once initially
    // and again whenever it is changed, aka when AJAX completes
    console.log($scope.results.sites);
};