Angularjs:服务于多个 $resource url/数据源的服务?

Posted

技术标签:

【中文标题】Angularjs:服务于多个 $resource url/数据源的服务?【英文标题】:Angularjs: a Service that serves multiple $resource urls / data sources? 【发布时间】:2013-06-18 04:52:02 【问题描述】:

我有一个 Angular 服务/提供程序,它为我的控制器提供 json 数据,效果很好:

    angular.module('myApp.services', ['ngResource']).
      factory("statesProvider", function($resource)
      return $resource('../data/states.json', , 
        query: method: 'GET', params: , isArray: false
      );
    );

但是我还需要将 json 数据从另一个文件 counties.json 提供给同一个控制器。

我在哪里可以找到如何编写一个将两个文件都提供给我的控制器的服务?

【问题讨论】:

【参考方案1】:

您可以更新服务以返回资源的哈希值,而不是单个:

angular.module('myApp.services', ['ngResource']).
  factory("geoProvider", function($resource) 
    return 
      states: $resource('../data/states.json', , 
        query:  method: 'GET', params: , isArray: false 
      ),
      countries: $resource('../data/countries.json', , 
        query:  method: 'GET', params: , isArray: false 
      )
    ;
  );

您将能够使用它在函数名称末尾添加.query()geoProvider.states.query()geoProvider.countries.query()myApp.services 必须注入您的控制器,然后将geoProvider 服务注入控制器本身好吧。

【讨论】:

这看起来像我正在搜索的内容,但您能解释一下如何从控制器调用“州”和“国家”吗?通常,我只会做 myApp.services.query()。谢谢 @chapstick 为了使用它,您应该将myApp.services 模块注入到包含控制器的模块中,然后将geoProvider 服务注入控制器本身。之后你就可以在控制器中使用geoProvider.states.query()geoProvider.countries.query()【参考方案2】:

我假设您想在两个文件都加载后执行一些代码。 Promise 对此非常有效。我认为资源不会返回承诺,但您可以使用 $http 服务进行简单的 ajax 调用。

在这里,我为两个数据文件分别定义了一个服务,以及第三个服务,它返回一个承诺,当两个文件都完成加载时,该承诺将得到满足。

factory('states',function($http) 
    return $http.get('../data/states.json');
).
factory('countries',function($http) 
    return $http.get('../data/countries.json');
).
factory('statesAndCountries', function($q, states, countries) 
    return $q.all([states, countries]);
);

然后在你的控制器中:

statesAndCountries.then(function(data) 
    var stateData = data[0];
    var countryData = data[1];
    // do stuff with stateData and countryData here
);

【讨论】:

以上是关于Angularjs:服务于多个 $resource url/数据源的服务?的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS Resource:与 RESTful API 交互

angularJS $resource与后台restapi的对应关系

Angularjs多个HTTP POST请求导致net :: ERR_INSUFFICIENT_RESOURCES

AngularJs的resource服务与Rest服务交互

浅谈AngularJS中使用$resource

错误:未知提供者:$resourceProvider <- $resource <- myservice AngularJS 服务