2013-04-16 6 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'}, {}); 
    }); 

がその後どのように私はすべてのワークフローを照会できますか?私はすでに/api/workflow/:uuidにしようとしているので、それを達成するためにWorkflowServiceを使用することはできません。別のURLをベースにした別のサービスが必要です。

私は間違って使用していない限り、これは非常に柔軟なようではありません。

私は、すべてのデータを照会Serviceハンドルを見慣れて、私はまだとの対話方法を持っていると思いますので、私はこのサービスを整理するかどうかはわかりませんがWorkflow[]

を返すためにWorkflowService.getActiveWorkflows()のようなメソッドを持っています単一のエンティティ(WorkflowService.save(workflow);など)。 $resource sは、特定のRESTfulなURLの周りになるように設計されている方法で、それは

+0

あなたは渡さずにメソッドを呼び出す場合:UUIDパラメータを私が知っているように、角度は、あなたのURLからこのパラメータを削除します。あなたはここのようなサービスを呼び出そうとしましたか: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 
     } 
    }); 
}); 
関連する問題