2013-04-16 26 views
6

Tôi không tin rằng tôi hiểu cách sử dụng đúng cách các dịch vụ của Angular. Tôi đang sử dụng máy chủ JAX-RS.

Nếu dịch vụ có nghĩa vụ phải làm việc tương tự (như lấy từ phonecat example) ...

angular.module('workstation.services', ['ngResource']). 
    factory('WorkflowService', function($resource, apiUrl){ 
     return $resource(apiUrl+'/api/workflow/:uuid', {uuid:'@uuid'}, {}); 
    }); 

Sau đó, làm thế nào để truy vấn cho tất cả các quy trình công việc? Tôi không thể sử dụng WorkflowService để thực hiện điều đó vì nó đã được thử để /api/workflow/:uuid. Tôi sẽ cần phải có một dịch vụ khác dựa trên một URL khác.

Điều này có vẻ như nó rất linh hoạt, trừ khi tôi đang sử dụng sai.

Tôi đang sử dụng để nhìn thấy một tay cầm Service tất cả các truy vấn cho dữ liệu và các phương pháp như đã WorkflowService.getActiveWorkflows() trở Workflow[]

Tuy nhiên tôi không chắc chắn làm thế nào để tổ chức các dịch vụ này bởi vì tôi vẫn muốn có phương pháp tương tác với một thực thể duy nhất, như WorkflowService.save(workflow);. Với cách $resource s được thiết kế để được xung quanh một URL RESTful cụ thể nó là khó khăn để cấu trúc đó một cách chính xác ...

+0

Nếu bạn gọi phương thức chưa trải qua: tham số uuid, góc sẽ loại bỏ tham số này từ url của bạn, như tôi biết. Bạn đã cố gắng gọi dịch vụ như sau: https://github.com/angular/angular-phonecat/blob/master/app/js/controllers.js –

+1

+1 cho tiêu đề mô tả (tất cả điều gì đó) :) – Zlatko

Trả lời

0

tôi đã kết thúc với giải pháp này ...

này cho phép tôi để xây dựng bất cứ giải pháp tôi muốn trong dịch vụ, trong khi vẫn có quyền truy cập vào tài nguyên có sẵn.

'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

Kiểm tra angular documentation from $resource, đọc hành động đối số. Nó hỗ trợ để xác định một url sẽ ghi đè lên url cơ sở cho một hành động cụ thể.

Sử dụng tác vụ mặc định 'truy vấnTất cả' bạn có thể truy vấn tất cả nội dung nào đó từ tài nguyên.

Ví dụ:

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 
     } 
    }); 
}); 
Các vấn đề liên quan