2016-12-24 57 views
0

我想结合多个请求到一个,所以它不会做n个请求,但一个。角度ui路由器优化解决方案只有一个请求

问题是我不知道如何解决名称对象的问题,这些名称是在ctrl中注入的变量。

例如,现在我已经解决:

resolve: { 
       regions : ["$http", function($http){ 
        return $http({...}); 
       }], 
       coordinators: ["$http", function($http){ 
        return $http({...}); 
       }], 
       .... 
      } 

我想要的(没有工作)是相同的变量(N名),只有一个请求,它会返回n个值到名称的对象:

resolve: { 
       [regions,coordinators,...] : ["$http", function($http){ 
        return $http({... return values;}); 
       }] 
      } 

任何想法如何?

function gatherResolves() { 
    return { region1.promise, region2.promise, region3.promise }; 
} 

然后在解决您只需一个电话:

.state('foo', { 
    resolve: regions: ['$http', function($http) { 
    return $http.gatherResolves({ ... }); 
    }] 
}) 

一旦

+0

我不确定我是否看到你想要做的事情:你想在一个解析中使用多个http查询并只返回一个带有{regions:[],coordinators:[]}的变量? – 42tg

+0

如果你只想要一个请求,你必须从后端返回你需要的所有数据,例如:'$ http.get(“/ regions_coordinator”)' – Merlin

+0

在后端,我将把$ http请求连接在一起,所以没关系。可以说我有10个要求解决。我只想创建一个将所有已经指定的名称返回给它们的值,但将它们连接在一起。所以我会有名称'[区域,协调员,...]'的数组,我可以注入到CTRL(不需要改变CTRL)。问题是如果我做了一些名字,我得到了错误。 –

回答

0

您可以通过具有收集的多条信息转换为对象字面一个服务端点实现这一目标在控制器中,然后注入它,然后您可以通过解构(假设您正在使用ES6)将注射器拆分为您想要的各个部分,或者手动将对象文本分配回您的个人调用的变量。

constructor(regions) { 
    this.splitRegions(this.regions); 
} 

splitRegions(regions) { 
    this.region1 = regions['region1']; 
    this.region2 = regions['region2']; 
} 

我可能混合了一些语法,因为我混合ES5/ES6我认为。但是你明白了,有可能将它全部提炼为1解决呼叫。真正的问题是,为什么,因为你只是在转移逻辑。此外,其中一个好处是,子状态会继承解析,因此您可以构造代码以利用此功能。只要有一个解决方案,就意味着你在那个父母的所有孩子状态中都带着这个问题。