2013-04-16 5 views
6

Nie jestem przekonany, że rozumiem, jak prawidłowo korzystać z usług Angular. Używam serwera po stronie JAX-RS.

Jeśli usługi mają działać jak (jak wzięte z phonecat example) ...

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

Więc jak mam kwerendy dla wszystkich przepływów pracy? Nie mogę użyć WorkflowService, aby to osiągnąć, ponieważ jest już próbowany do /api/workflow/:uuid. Potrzebowałbym innej usługi, która opiera się na innym adresie URL.

Nie wydaje się, że jest bardzo elastyczny, chyba że używam go źle.

jestem przyzwyczajony do widząc Service obsłużyć wszystkich zapytań dla danych i mają podobne metody WorkflowService.getActiveWorkflows() wrócić Workflow[]

Jednak nie jestem pewien, jak zorganizować tę usługę, bo nadal chce mieć metody, które współdziałają z pojedynczy podmiot, taki jak WorkflowService.save(workflow);. Z jak $resource y mają być wokół konkretnego relaksującego URL ciężko jest strukturą, która poprawnie ...

+0

Jeśli wywołać metodę bez zdaniu: uuid parametr kątowy usunie ten parametr z adresu URL, co wiem. Czy próbowałeś zadzwonić do tej usługi jak tutaj: https://github.com/angular/angular-phonecat/blob/master/app/js/controllers.js –

+1

+1 za opisowy tytuł (wszystko w czymś) :) – Zlatko

Odpowiedz

0

skończyło się z tego rozwiązania ...

To pozwala mi budować cokolwiek rozwiązania Chcę w usługi, mając jednocześnie dostęp do dostępnych zasobów.

'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

Sprawdź angular documentation from $resource, przeczytaj Akcje argumenty. Umożliwia zdefiniowanie adresu URL, który zastąpi podstawowy adres URL dla określonego działania.

Za pomocą domyślnej akcji "queryAll" można wysłać zapytanie o wszystko z czegoś, co jest z zasobu.

Przykład:

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 
     } 
    }); 
});