Angular.js $资源结果

ika*_*vic 2 angularjs

我发现Angular $资源的行为非常奇怪.请查看以下代码行:

    class Service
        constructor: ($resource) ->
            service = $resource '/record/:id'

            Service::list = (cb) ->
                service.query().$promise.then (data) ->
                    #result: data == [e, $promise: Object, $resolved: true]
                    cb data

            Service::get = (id, cb) ->
                service.get(id:id).$promise.then (data) ->
                    #result: data == {id: 1, name: 'name' ...}
                    cb format data
Run Code Online (Sandbox Code Playgroud)

服务"get"方法返回服务器发送的正确值(对象),但"list"方法作为结果返回包含$ promise和$ resolved的数组...

有没有人有一些逻辑解释?

更新:

我发现了这个问题.服务结果是字符串数组,导致sting chars的结果数组.这可以通过使用$ http而不是$ resource来解决.

例如:

服务器端 - > ['list','of','elements']

客户端 - > ['l','我','s','t']

k0n*_*0nG 5

如果像我一样,你希望你的回复为你提供没有额外的$ promise和$ resolved属性的数据,你可以修改资源并添加一个'拦截器',如下所述:http: //docs.angularjs.org/guide/迁移#资源的承诺,都分辨与-的资源实例

对于get,它将如下所示:

var Resource = $resource('/url', {}, {
  get: {
    method: 'get',
    interceptor: {
      response: function(response) {
        // expose response
        return response;
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

然后,在发出get请求时,您可以访问响应对象而不是资源实例.例如:

Resource.get(function(response){
    angular.forEach(response.data, function(value, key){

    }, $scope.varName);
});
Run Code Online (Sandbox Code Playgroud)

这也意味着您可以访问其他响应属性response.status,response.headers以及获取资源实例response.resource.