2 Stimmen

Ng-repeat konvertiert Ressourcenobjekte in einfache Objekte

Ich erhalte meine Daten mit Hilfe des Angular $resource-Dienstes als Array. Jedes Element dieses Arrays ist ein Resource-Objekt. So kann ich Methoden wie $save und $update dieser Objekte verwenden. In einer Ansicht stelle ich mein Array mit Hilfe der ng-repeat-Direktive wie folgt dar:

Und hier habe ich ein Problem. Das appointment-Objekt, das ich in der editAppointment-Methode bekomme, ist ein einfaches Objekt. Kein Resource-Objekt mehr. Also kann ich die hilfreichen Methoden wie oben erwähnt nicht verwenden.

$scope.editAppointment= function(appointment){
    console.log(appointment); // > Objekt
    console.log(object.appointments); // > Array von Resource           
}

Hat jemand dieses Problem auch bemerkt? Vielleicht ist es ein Bug, aber das kann ich mir nicht vorstellen.

2voto

ksimons Punkte 3795

Angenommen, Ihre Ressourcenklasse heißt Appointment, sollten Sie einfach Folgendes tun können:

$scope.editAppointment= function(appointment){
   new Appointment(appointment).save();         
}

Vermutlich sieht Ihre Appointment-Ressource ungefähr so aus (d. h. sie ordnet eine Art von id-Eigenschaft von vorhandenen Objekten den URL-Parametern korrekt zu):

var Appointment = $resource('/appointment/:appointmentId', {appointmentId:'@id'});

Dies wäre der Fall, wenn Ihre Terminobjekte (d. h. die zugrunde liegenden JSON-Objekte, die von Ihrer API verarbeitet werden) eine ID-Eigenschaft namens id haben. Wenn sie anders benannt ist (oder wenn es mehrere Pfadvariablen in Ihrer URL gibt), müssen Sie lediglich das zweite Argument ändern, um alle Eigenschaften der zu speichernden Objekte (die Werte, die mit '@' beginnen) den URL-Pfadvariablen zuzuordnen (die mit ':' in Ihrer URL beginnen).

Sehen Sie hier, wie sie ein neues Kartenobjekt im Beispiel für Kreditkarten speichern: http://docs.angularjs.org/api/ngResource.$resource. Die Tatsache, dass sie mit einem völlig neuen Objekt arbeiten und Sie versuchen, ein vorhandenes zu speichern, ist irrelevant. Angular kennt den Unterschied nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X