2012-08-22 13 views
10

Können Sie mir bitte helfen, wo Ressource (Service) spezifische Geschäftslogik in AngularJS zu platzieren. Ich finde es sollte toll sein, eine modellhafte Abstraktion über meine Ressource zu erstellen, aber ich bin mir nicht sicher, wie.wo ressourcenspezifische Logik zu platzieren

API-Aufruf:

> GET /customers/1 
< {"first_name": "John", "last_name": "Doe", "created_at": '1342915200'} 

Ressource (in Coffeescript):

services = angular.module('billing.services', ['ngResource']) 
services.factory('CustomerService', ['$resource', ($resource) -> 
    $resource('http://virtualmaster.apiary.io/customers/:id', {}, { 
    all: {method: 'GET', params: {}}, 
    find: {method: 'GET', params: {}, isArray: true} 
    }) 
]) 

Ich möchte wie etwas tun:

c = CustomerService.get(1) 
c.full_name() 
=> "John Doe" 

c.months_since_creation() 
=> '1 month' 

Vielen Dank für alle Ideen. Adam

Antwort

18

Der beste Ort für Logik, die für eine Instanz eines Domänenobjekts aufgerufen werden muss, wäre ein Prototyp dieses Domänenobjekts.

Sie könnten etwas in diese Richtung schreiben:

services.factory('CustomerService', ['$resource', function($resource) { 

    var CustomerService = $resource('http://virtualmaster.apiary.io/customers/:id', {}, { 
     all: { 
      method: 'GET', 
      params: {} 
     } 
     //more custom resources methods go here.... 
    }); 

    CustomerService.prototype.fullName = function(){ 
     return this.first_name + ' ' + this.last_name; 
    }; 

    //more prototype methods go here.... 

    return CustomerService;  

}]); 
+2

Siehe auch die angularjs.org Homepage, die "Wire ein Backend" Abschnitt, die mongolab.js Registerkarte/Code, wo Prototyp auch verwendet wird, um die Ressourcenklasse zu erweitern. –

0

Sie vielleicht einen Blick auf meine Antwort auf this SO question auf verwandten Thema zu nehmen.

Mit einer solchen Lösung wird die domänenspezifische Logik in die benutzerdefinierte Domänenentitätsklasse (insbesondere den Prototyp) übernommen.

Verwandte Themen