我不相信我知道如何正确地使用Angular的服务。我使用的是JAX-RS服务器端。
如果服务应该像这样工作(取自phonecat example)...
angular.module('workstation.services', ['ngResource']).
factory('WorkflowService', function($resource, apiUrl){
return $resource(apiUrl+'/api/workflow/:uuid', {uuid:'@uuid'}, {});
});
那么如何查询所有的工作流呢?我不能使用WorkflowService
来完成这个任务,因为它已经尝试过/api/workflow/:uuid
了。我需要有另一个服务,这是基于另一个网址。
这看起来不太灵活,除非我用错了。
我习惯于看到Service
处理所有数据查询,并使用像WorkflowService.getActiveWorkflows()
这样的方法来返回Workflow[]
然而,我不确定如何组织这个服务,因为我仍然希望拥有与单个实体交互的方法,比如WorkflowService.save(workflow);
。由于$resource
是如何被设计成围绕特定的RESTful URL的,因此很难正确地构造它……
发布于 2013-04-16 19:10:31
我最终得到了这个解决方案...
这允许我在服务中构建任何我想要的解决方案,同时仍然可以访问可用的资源。
'use strict';
/* Services */
angular.module('workstation.services', ['ngResource']).
service('WorkflowService', function ($resource, $http, apiUrl) {
var service = new BaseService($resource(apiUrl+'/api/workflow/:uuid', {uuid:'@uuid'}, {}));
/* Get all available workflows */
service.getWorkflows = function () {
return $http.get(apiUrl+'/api/workflow/getAllActive').then(function (response) { return response.data });
}
return service;
});
/* Base service */
function BaseService(resource) {
this.resource = resource
};
BaseService.prototype.getResource = function () { return this.resource }
BaseService.prototype.newResourceInstance = function () { return new this.resource }
发布于 2014-09-23 08:57:23
检查angular documentation from $resource,读取操作参数。它支持定义一个url,该url将覆盖特定操作的基本url。
使用默认操作'queryAll‘,您可以查询资源中的所有内容。
示例:
angular.module('workstation.services', ['ngResource']).
factory('WorkflowService', function($resource, apiUrl){
return $resource(apiUrl+'/api/workflow/:uuid', {uuid:'@uuid'}, {
queryAll: {
url: apiUrl + '/api/workflow/getAllActive',
method: 'GET',
cache: false,
isArray: true
}
});
});
https://stackoverflow.com/questions/16042508
复制