Ich habe ein Problem beim Binden von Daten, die vom Server abgerufen wurden, in eine Dropdown-Liste. Das Hauptproblem ist meiner Meinung nach die Tatsache, dass der Vergleich an verschiedenen Objekttypen vorgenommen wird. Beispiel: 1. Das vom Server zurückgegebene Objekt enthält eine Währungscodezeichenfolge. wir wollen, dass diese in der Dropdown-Liste ein Element gebunden seinAngularJS Drop-Down (ng- Optionen) nicht bindend - String an Objekt (erste Auswahl)
"baseCurrencyCode":"GBP"
Die Ansicht Modell, um die Liste der Währungen gibt .. Diese werden als Liste zurückgegeben Währungs Objekte mit unterschiedliche Eigenschaften
{"currencies":[{"id":1,"rateId":0,"abbreviation":"AFN","description":"Afghani","rate":0.0,"rateDescription":null,"languageCode":"en-gb","isDefault":true,"fullDescription":"AFN - Afghani - ","shortDescription":"AFN - Afghani"}}
usw.
Derzeit habe ich diese Arbeit bekam durch eine Funktion für jedes Element in th durch jede Eigenschaft gehen schreiben Suchen Sie die richtige Eigenschaft, mit der Sie vergleichen möchten - führen Sie den Vergleich durch und geben Sie dann die ursprüngliche Auswahl zurück.
Wenn ich meine Speichermethode aufruft, muss ich die Währungsabkürzung manuell an das Objekt binden, das ich an den Server zurückgeben möchte.
Sicherlich muss es einen besseren Weg geben, dies zu tun?
Referenz Einige meiner Code ..
<select ng-model="selectedCurrency" ng-options="currency.shortDescription for currency in viewModel.currencies"></select>
// Call to my custom method..List, PropertyName, value to compare
$scope.selectedCurrency = InitialiseDropdown($scope.viewModel.currencies, "abbreviation", $scope.updatedObject.baseCurrencyCode);
// Code executed when saving - to bind the currency to the updated object
$scope.updatedObject.baseCurrencyCode = $scope.selectedCurrency.abbreviation;
Jede Hilfe ist willkommen! Zusammengefasst ..
Das Hauptproblem hier ist die Bindung an den Drop-Down-und Vorselektion
EDIT Sorry, wenn ich nicht klar genug .. war.
Das Objekt, das wir aktualisieren, enthält einen Parameter (String) der Währungsabkürzung.
Die Liste, aus der wir auswählen, ist eine Liste von Währungsobjekten. Da es sich um zwei verschiedene Objekttypen handelt, konnte ich keine angulars 2-Wege-Bindung einstecken und habe dafür Code geschrieben, um dies beim ersten Abruf und beim Speichern zu tun.
Der sauberste Weg, um dies zu beheben, wäre, ein Währungsobjekt in unserem Retrieval anstelle einer einfachen Zeichenfolge der Abkürzung zurückzugeben, aber das ist keine Option.
Gibt es eine bessere Möglichkeit, die 2-Wege-Bindung für verschiedene Objekttypen zu aktivieren?
Thanks again
Vielen Dank für Ihren Beitrag ..Die Methode, die Sie beschrieben haben, ist ziemlich genau das, was ich getan habe, aber es bedeutet, dass wir diese Initialisierungsmethode bei jedem Dropdown aufrufen müssen. Gibt es dafür keinen saubereren Weg? – Shorttylad
Es gibt: bereinigen Sie Ihre Geschäftslogik. Der Server sendet ein Array von Objekten und einen Währungscode und erwartet ein Währungsobjekt (so verstehe ich es zumindest). Das bedeutet, dass irgendwann nachgeschlagen werden muss (um festzustellen, welches Währungsobjekt einem Währungscode entspricht). Habe ich recht ? – gkalpak
@ user1863426: Werfen Sie einen Blick auf meine aktualisierte Antwort. Ist es das was du willst ? – gkalpak