Ich möchte angular-ui's ui.select
verwenden, um multiple dropdown field
zu füllen. Ich möchte die ausgewählten Objekte an das ng-Modell übergeben und sie meinen Optionen zuordnen, die Objekte der gleichen Struktur enthalten, aber nicht aus derselben Quelle:
Die trainings
Liste von ng-repeat
mit einem Beispieltraining sieht folgendermaßen aus:
Meine skills
Liste von ui-select-choices
enthält dieselbe Datenstruktur wie in training.skills
:
Leider funktioniert das nicht. Der ui-select leert mein training.skills
und zeigt mir ein leeres Auswahlfeld an. Ich verstehe, dass angularjs nicht in der Lage ist, diese Objekte zuzuordnen, wenn sie nicht das gleiche Array, wie in this blogpost . Es empfiehlt sich, track by
zu verwenden, um ui.select
anzugeben, welche Eigenschaft verwendet werden soll, um die beiden Listen von Objekten zuzuordnen, aber wenn ich die ui-select-choices
-Zeile zu:
nichts ändert sich. Gibt es irgendeine Möglichkeit, dies zu erreichen, ohne meine Objekte durch ihre IDs zu ersetzen, wie das Beispiel für eine einzelne Bindungseigenschaft vorschlägt?
Wenn ich nicht falsch liege, versuchst du, das ganze Objekt mit seiner ID zu vergleichen.
Haben Sie versucht zu verwenden:
%Vor%Beachten Sie, dass ich "skill.id" aus der Wiederholung entfernt habe. Ich denke auf diese Weise sollten Sie die Objekte vergleichen und hoffentlich wird es funktionieren.
Sonst würde ich die ui-select-Auswahl so lassen, wie Sie sie haben und in der ui-select ein Array von IDs (die ausgewählten Trainings) übergeben, die der Liste entsprechen. Natürlich würde dies mehr Code von Ihrer Seite erfordern, um das Skills-Array bei jeder Änderung zu aktualisieren.
Ich hoffe, es hilft.
Wenn Sie auf die Dokumentation verweisen, die Sie unter Ссылка finden
Der track by
muss immer der letzte Ausdruck sein.
Also, wie von madc vorgeschlagen, wenn Sie zu:
wechseln %Vor%Es würde funktionieren.
Unten ist das Dokumentations-Snippet, das über Track als letzten Ausdruck sagt:
Tags und Links angularjs angular-ui