angularjs - Angular.js $resource 结果

标签 angularjs

我发现 Angular $resource 的行为非常奇怪。请检查以下代码行:

    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

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

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

更新:

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

例如:

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

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

最佳答案

如果您像我一样希望您的响应在没有额外的 $promise 和 $resolved 属性的情况下为您提供数据,您可以修改资源并添加一个“拦截器”,如下所述: http://docs.angularjs.org/guide/migration#resource-promises-are-resolved-with-the-resource-instance

get 看起来像这样:

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

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

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

    }, $scope.varName);
});

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

关于angularjs - Angular.js $resource 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576654/

相关文章:

angularjs - 在 Jasmine + Angular 中测试 $httpBackend

javascript - 如何使用提交按钮来搜索表中的记录?

javascript - 如果满足条件,Angular JS 如何添加 CSS 类

JavaScript RegExp - 如何根据条件匹配单词

javascript - 如果在 angularjs 中启用了 html5mode,如何重新加载页面?

angularjs - 基于属性在angularjs中路由

javascript - 有没有办法在 <video> 源调用中包含自定义 http header ?

javascript - AngularJS 继承 'config' 从一个模块到另一个模块

angularjs - 日历图标未在 angularjs 中打开日历

javascript - 找不到命名空间 'ng'