angularjs资源查询错误解释数组

时间:2014-01-25 21:51:27

标签: javascript angularjs rest resources

我的REST服务器从/blog返回以下内容:

["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"}]

不知何故,角度错误解释了这个值数组。我也尝试了完全相同的结果:

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调用会打印正确的值。

1 个答案:

答案 0 :(得分:0)

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

的副本

使用$ resource时,如果isArray = false,则预期响应是JSON对象:

{
   "foo" : "bar"
}

如果isArray = true,则预期的响应应该是对象的 的JSON数组

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

在这种情况下,您有三种选择:

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