AngularJS Restangular并获得一个url

时间:2014-11-10 04:07:05

标签: angularjs rest

我有这些"方法"在我的角度服务中,使用restangular来获取远程数据,其中respose是这样的:

{
"1105":{"title":"","field_nazione":{"und":[{"value":null,"format":null,"safe_value":""}]},"field_redazionale":{"und":[{"value":null}]}},
"1110":{"title":"","field_nazione":{"und":[{"value":null,"format":null,"safe_value":""}]},"field_redazionale":{"und":[{"value":null}]}}
}; 


function restfulService(ipCookie,Restangular) {
        return {
            //Setta la directory di partenza del service rest. In questo modo non devo sempre definirlo
            restfulBase : function() {
                return Restangular.oneUrl('rest','http://MYREMOTEHOST/rest');
            },

            getAllCity : function () {
                return this.restfulBase().get('cities', {'all':1}, {}, {'X-CSRF-Token': tokenVar});
            },
            ....
};

为什么当我调用getAllCity()时,url是:

http://MYDOMAIN/rest?0=c&1=i&2=t&3=i&4=e&5=s

如果我使用它:

Restangular.oneUrl('rest','http://MYDOMAIN/rest/cities').get({all : 1});

我没有问题。

我尝试更改我的应用程序,在.config()方法中设置Restangular.setBaseUrl(),然后更改我的服务以使用Restangular.all(' cities')。get()但我有一个关于"字符串"。

的错误

如果我使用getAll(),我有一个关于" getLists()想要数组而不是对象"的错误。

那么:使用Restangular的正确方法是什么?我已经阅读了在线文档和教程,但我还不了解如何以正确的方式检索元素。并且"发布"。

感谢并抱歉这个愚蠢的问题。

1 个答案:

答案 0 :(得分:0)

我认为问题在于您将基础设置为“一种”资源类型。 “one”方法不是用于设置基本URL。我设置基本网址的方式是这样的:

angular.module('app')
   .config(['RestangularProvider', function (RestangularProvider) {

        // Set the base URL
        RestangularProvider.setBaseUrl('http://MYREMOTEHOST/rest');    
    }]);

然后我访问每个资源,具体取决于其类型为“one”或“all”,如下所示:

function restfulService(ipCookie,Restangular) {
        return {
            getAllCity : function () {
                return Restangular.all('cities').getList();
            },
            ....
};

您还可以在配置阶段或运行时的每个请求中设置默认参数。 使用“all”时,“getLists()想要数组而不是对象”错误是因为它只接受数组作为响应,因此您需要先拦截数据并在之前解析数据阵列。在你的情况下,你得到一个对象,所以你可以像这样解析它:

    // this happens at runtime, either in your implementation code or in a more global config file, like:

   Restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
    // If the what is set, than just grab it and return it
          if (data.hasOwnProperty(what)) {
               return data[what];
          } else {
               // Otherwise make it an array
               var arr = [];
               for (var key in data) {
                   arr.push(data[key]);
               }
               return arr;
         });

希望这有帮助。