角度误差:对象没有方法推送

时间:2013-06-20 08:32:29

标签: rest angularjs

我正在尝试使用REST服务和$resource进行角度工作。

它可以从JSON获取数据,但是当更新$save()或称为$rec()的自定义方法时,我在控制台中出现错误:TypeError: Object #<c> has no method 'push'。将isArray切换为truefalse,并未改变任何内容。

我做了一个plunker:http://plnkr.co/edit/fS2bjRKPgUulTbTxgg2j

当您在自己的服务器上运行时,错误是可见的。

html:

<div ng-controller="TestCtrl">
    <div ng-repeat="obj in objs">
        <div>
          <h3>{{obj.name}}</h3>
          <h3>{{obj.age}}</h3>
          <input type="text" ng-model="obj.name" /><br />
          <input type="text" ng-model="obj.age" /><br />
          <button ng-click="save(obj)">Save</button>
        </div>
      </div>
    </div>

和javascript:

'use strict';
angular.module('TestApp', ['TestApp.services', 'TestApp.controllers']);

angular.module('TestApp.services', ['ngResource']).
  factory('Obj', function($resource){
return $resource('datas.json', {}, { 'rec': {method: 'POST', isArray: true } });
});

angular.module('TestApp.controllers', []).
controller('TestCtrl', ['$scope', 'Obj', function($scope, Obj) {
    $scope.objs = Obj.query();
    $scope.save = function(obj) {
        obj.$save();
            console.log(obj);
    }
}]);
你知道错误的来源吗?

1 个答案:

答案 0 :(得分:0)

我已将你的plnkr复制到我的开发机器,如下所示设置了sinatra网站,但我仍然没有看到这个错误。当我点击蓝色按钮时,客户端发布了一个JSON字符串,如{"name"=>"louise", "age"=>"32"},一切似乎都很好。您是否正确处理POST

这是我的服务器代码:

<强> app.ru

# -*- coding:utf-8; mode:ruby; -*-

require 'json'
require 'multi_json'
require 'sinatra/base'
require 'sinatra/json'

class App < Sinatra::Base
  helpers Sinatra::JSON

  get '/datas.json' do
    json([
          {"name" => "louise", "age" => "32"},
          {"name" => "jeanne", "age" => "25"},
          {"name" => "renée", "age" => "21"},
          {"name" => "fernande", "age" => "28"}
         ])
  end

  post '/datas.json' do
    data = JSON.parse request.body.read.to_s
    200
  end
end

<强> config.ru

# -*- coding:utf-8; mode:ruby; -*-

require './app.rb'
run App