2014-01-25 26 views
1

我的REST服务器返回从/blog如下:angularjs资源查询曲解阵列

["hello","yo"] 

这是我整个angularjs应用:

var myapp = new angular.module("myapp", ["ngResource"]); 

myapp.controller("MainCtl", ["$scope", "$resource", function($scope, $resource){ 
    var Blog = $resource("/blog/:entry", {entry: '@entry'}); 
    $scope.entries = Blog.query(); 
}]); 

当我把{{entries}}某处HTML,我看这个:[{"0":"h","1":"e","2":"l","3":"l","4":"o"},{"0":"y","1":"o"}]

不知何故angular会误解这个数组值。我也尝试过,结果完全相同:

myapp.controller("MainCtl", ["$scope", "$resource", function($scope, $resource){ 
    var Blog = $resource("/blog/:entry", {entry: '@entry'}, { 
     list: { 
      url: "/blog", 
      method: "GET", 
      isArray: true, 
      transformResponse: function(data, headers) { 
       var h = ["hello","yo"]; 
       console.log(h); 
       return h; 
      } 
     } 
    }); 
    $scope.entries = Blog.list(); 
}]); 

有趣的是,console.log调用会打印出正确的值。

+0

顺便说一下这是1.2.10的角度。 – Jake

+0

这很可能是您从服务器端发送响应的方式。你在那里用什么?例如, –

+0

http://pastebin.com/kZJkRp0C – Jake

回答

0

这绝对是One dimensional array of strings being parsed to 2d by angular resource

重复使用$资源,如果IsArray的=假,预期的响应是一个JSON对象:

{ 
    "foo" : "bar" 
} 

如果IsArray的= true,则预期的反应应该是为对象的JSON阵列

[ 
    { "foo" : "bar" }, 
    { "faa" : "bah" } 
] 

你必须在这种情况下三个选项:

  1. 使用$ HTTP,而不是$资源
  2. 使用$ HTTP的transformResponse功能(见http://docs.angularjs.org/api/ng。$ HTTP)
  3. 如果你有过API控制,你可以改变结构,你要发送的响应。根据语义,可以发送一个对象数组(使用isArray=true)或包含数组的对象(使用isArray=false)。哪一个对你更有意义。