2013-10-14 11 views
5

Ich habe eine Ressource definiert, für die ich eine benutzerdefinierte Methode definiert habe. In meiner Vorlage kann ich diese Methode nicht treffen. Mein Code sieht so aus. Die Funktion getName() wird nicht aufgerufen. Was bin ich hier

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() -> funktioniert perfekt

+0

Wo ist '' people' people.name' erklärt? – Chandermani

+0

Ich habe die Frage bearbeitet. wir können eine Berechnung annehmen, die in getName geschieht, und eine Zeichenfolge zurückgeben, die der Name ist, der in der Vorlage angezeigt wird. –

Antwort

3

Ihr Problem ist:

  1. Sie eine Liste von Personen wollen, aber Ihre zurückgegebenen Daten ist keine Liste. So können Sie transformResponse in Ihrem Dienst verwenden, um Objekt in Array umzuwandeln.

  2. Funktion getName sollte this.name, nicht name zurückgeben.

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

Hier ist ein JSFiddle Beispiel: http://jsfiddle.net/9JFhA/1/

+0

das sieht gut aus, aber ich bekomme den Fehler TypeError: Object # hat keine Methode 'push'. Was denkst du könnte der Fehler sein –

+0

habe es funktioniert danke! –

0

Ihr Beispiel Service nahezu perfekt definiert wurde, habe ich die einzige Änderung war, dass ich eine isArray: true zu Ihrer benutzerdefinierten query Funktion hinzugefügt, weil es Rückkehr eine Liste von Personen.

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

});

Vielleicht wurde deshalb Ihre benutzerdefinierte Methode nicht aufgerufen.

Werfen Sie einen Blick auf die Arbeits Plunker ich gemacht: http://plnkr.co/edit/2i7IHs?p=preview, die eine benutzerdefinierte Methode die Funktion in einem $ resource Service prüft.

+0

Aber meine Daten zurückgegeben ist kein Array. Anfangs hatte ich das. Ich bekam den Fehler "Objekt hat keine Methode drücken". Entfernt es und es hat perfekt funktioniert. –

Verwandte Themen