从$ resource服务到控制器的响应数据

时间:2014-05-04 23:09:35

标签: angularjs

我正在编写一个与RESTfull服务器“对话”的应用程序,我遇到了一些问题。以下是我的代码的精简版:https://gist.github.com/sasxa/ced4ecfa2a147b207cac,以及一些问题:

1)如何处理我的服务器返回的自定义JSON格式? $ resource接缝“要求”清理数据......例如:

// This works
response = [{...}, {...}, {...}]

// This doesn't work
response = { status: 'OK', data: [{...}, {...}, {...}], message: 'Hello!' }

据我了解,$ resorce.query()是一个在transformResponse阶段生成的承诺,但我无法在此对象的任何位置找到我的消息。

我开始研究$ http拦截器,我想我可以处理来自服务器的响应,但我不知道如何将该数据传递给服务(除了 data 之外的数组资源)或控制器......

2)有没有更好的解决方案来动态加载模板然后我正在使用的那个?

angular.module( 'APPLICATION' )
    .config( ['$routeProvider', function ($routeProvider) {
      $routeProvider.when( '/:node', {
        template: '<section ng-controller="Controller" ng-include="template"></section>',
        controller: 'Controller'
      } );
    }] )

3)对代码结构和组织有任何建议或意见吗?我对AngularJS很新。我阅读并观看了许多教程,只是想确保我没有犯任何重大错误(:

感谢。

1 个答案:

答案 0 :(得分:1)

  1. 您不需要使用transformData修改该值,只需在进行查询调用时直接访问它

    MyResource.query({}, function(result) { $log.info(result.status); $log.info(result.data); $log.info(result.message); });

    您还需要确保将$ resource配置为期望将Object作为结果,而不是Array(默认值)。你可以这样做:

    $resource('<someurl>/:id', {id: '@id'}, { 'query' : { method: 'GET', isArray: false } });

  2. 您可以使用$templateCache在javascript中存储模板,然后在routeProvider中使用templateUrl

  3. 有一个很棒的Google文档跟踪here上角应用布局的当前最佳做法。

  4. 我还强烈建议您查看像ngbp这样的项目,以便更好地了解如何将整个应用整合在一起