2013-10-14 17 views
5

Ho una risorsa definita per la quale ho definito un metodo personalizzato. Nel mio modello, non sono in grado di raggiungere questo metodo. Il mio codice è simile a questo. La funzione getName() non viene chiamata. Che cosa mi manca qui

personservices.factory("Person", ["$resource", function($resource) { 
    var Persons = $resource("", {}, { 
    query: {method:'GET'} 
});              

Persons.prototype.getName = function() { 
    /* do something */ 
    return name; 
    } 
    return Persons; 
}]); 


<ul> 
    <li ng-repeat="person in persons"> 
    {{ person.getName() }} -> not being called 
    {{ person.id }} 
    </li> 
</ul> 

$scope.Persons = Person.query() -> funziona perfettamente

+0

Dove è '' people' dichiarati people.name'? – Chandermani

+0

Ho modificato la domanda. possiamo assumere alcuni calcoli che avvengono in getName e restituisce una stringa che è il nome da visualizzare nel modello. –

risposta

3

Il tuo problema è:

  1. si desidera un elenco di persone, ma i dati restituito non è una lista. Quindi puoi usare transformResponse nel tuo servizio per trasformare l'oggetto in array.

  2. La funzione getName deve restituire this.name, non name.

    app.factory("Persons", ["$resource", function($resource) { 
        var Persons = $resource("", {}, { 
         query: { 
          method:'GET', 
          isArray: true, 
          transformResponse: function(data, header) { 
           return angular.fromJson(data).items; 
          } 
         } 
        });              
    
        Persons.prototype.getName = function() { 
         /* do something */ 
         return this.name; 
        } 
    
        return Persons; 
    }]); 
    

Ecco un esempio JSFiddle: http://jsfiddle.net/9JFhA/1/

+0

sembra buono ma ottengo l'errore TypeError: Object # non ha metodo 'push'. cosa pensi potrebbe essere l'errore –

+0

farlo funzionare grazie! –

0

Il vostro servizio esempio è stato definito quasi perfettamente, l'unico cambiamento che ho fatto è che ho aggiunto un isArray: true per la funzione personalizzata query, perché il ritorno una lista di persone.

var Persons = $resource("/person", {}, { 
query: {method:'GET', isArray: true} 

});

Forse è per questo che il metodo personalizzato non è stato chiamato.

Dai un'occhiata al plunker funzionante che ho realizzato: http://plnkr.co/edit/2i7IHs?p=preview, che verifica la funzione di un metodo personalizzato in un servizio risorse $.

+0

Ma i miei dati restituiti non sono un array. Inizialmente l'ho avuto. Stavo ricevendo l'errore "l'oggetto non ha metodo push". Rimosso e funzionava perfettamente. –

Problemi correlati