AngularJS Object#<resource>没有方法'push'</resource>

时间:2014-03-04 12:09:05

标签: angularjs

有人可以帮助我解开这个谜团。

我的第一个$资源返回一个列表。 然后,我遍历列表并为集合中的每个对象调用另一个$ resource。 这段代码使用$ http工作,但我被告知我应该使用$资源进行休息,你就去了,我被卡住了。

我收到错误:AngularJS Object#没有方法'push'

我的restful服务返回一个JSON对象:

在我的服务/工厂:

services.factory('XXXXFactory', function ($resource) {
    return $resource('/xxxx-webapp-1.0-SNAPSHOT/restful/services/XXXOption/actions/listAll/invoke', {}, {
        query: { method: 'GET', isArray: true },
        create: { method: 'POST' }
    })
});

在我的控制器中:

app.controller('XXXXListCtrl', ['$scope', 'XXXXsFactory', 'XXXXXFactory', '$location',
      function ($scope, XXXXsFactory, XXXXXFactory, $location) {

    XXXXsFactory.query(function(data) {
        // success handler
          var resultType = data.resulttype;
          var objects = data.result.value;
          $scope.rowList= [];
          console.log(objects);

          alert('list? = '+ resultType);

          if(resultType == "list"){   

            angular.forEach(objects, function (item) {

                alert('item href = '+ item.href);

                var InnerXXXXResource = $resource(item.href, {}, { query: { method: 'GET', isArray: true}});     
                InnerXXXXResource .query(function(rowdata) {
                     $scope.rowList.push(rowdata);  

                    }, function(error) { });    
            });
          }

        }, function(error) {
            // error handler
        });

    }]);

HTML:

<tbody>
    <tr ng-repeat="row in rowList">
        <td width="70%">{{row.members.XXXDescription.value}}</td>
        <td align ="center" width="30%">{{row.members.price.value}}</td>
    </tr>
  </tbody>

1 个答案:

答案 0 :(得分:0)

如果要将数据发布到服务器和客户端:

因此,在您的控制器中,您应该使用您的工厂获取数据

$scope.data = XXXXFactory.query();

如果您正在处理对象,请更改isArray: false

并将数据发布到服务器

$scope.createInventory = function(){
        XXXXFactory.create($scope.newdata); // posts data to server side
        $scope.data.objects.push($scope.newdata); //posts data to client side
        $scope.newdata = '';
};