2013-04-16 19 views
6

我不相信我理解如何正確使用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。我需要另一個基於另一個URL的服務。

這似乎並不像它非常靈活,除非我錯誤地使用它。

我看慣了Service處理所有查詢數據並像WorkflowService.getActiveWorkflows()方法返回Workflow[]

但是我不知道如何組織這個服務,因爲我還是想有一個互動的方法一個單一的實體,如WorkflowService.save(workflow);。隨着怎麼$resource s的設計是圍繞一個特定的RESTful URL這是很難的結構,正確地...

+0

如果你調用該方法,而沒有經過:uuid參數,角將從您的網址刪除此參數,因爲我知道。你有沒有嘗試像這裏調用服務:https://github.com/angular/angular-phonecat/blob/master/app/js/controllers.js –

+1

+1描述性標題(所有的東西):) – Zlatko

回答

0

我結束了這種解決方案

這讓我建立我想在任何解決方案服務,同時仍然可以訪問可用的資源。

'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 } 
2

檢查angular documentation from $resource,閱讀行動參數。它支持定義一個將覆蓋特定操作的基礎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 
     } 
    }); 
}); 
相關問題