Es wäre schön, wenn es eine Antwort gäbe, die nicht davon ausgeht, dass Winkel zum Erstellen der Optionen verwendet wird. Was ist, wenn die Optionen bereits Teil des Markups sind?
– pspahn
9. April 2015 um 18:57 Uhr
@pspahn – laut docs.angularjs.org/api/ng/directive/ngOptions: nur a **single** hard-coded <option> element ... can be nested into the <select> element. Die Optionen dürfen nicht bereits Teil des Markups sein.
– Der DIMM-Reaper
19. August 2015 um 17:31 Uhr
@pspahn das würde das OP nicht beantworten, aber eine ganz andere Frage …
<select ng-init="somethingHere = options[0]"
ng-model="somethingHere"
ng-options="option.name for option in options">
</select>
Ich hatte ein Problem mit dieser Funktion, es war, dass ich ‘track by’ benutzte und es entfernte, um das Problem zu beheben, nur für den Fall, dass das jemandem auf der ganzen Linie hilft: D
– DrCord
15. April 2014 um 23:21 Uhr
An dieser Antwort ist nichts auszusetzen, aber ng-init ist in meinem speziellen Fall für mich fehlgeschlagen. Das Problem war, dass der von mir verwendete Wert zum Zeitpunkt des Ausführens von ng-init noch nicht verfügbar war: Ich habe den Wert über einen Ajax-Aufruf erhalten und in diesem Moment war ng-init bereits fertig. Am Ende habe ich einen Watcher für diesen Wert verwendet und in dieser Funktion dasselbe getan wie in ng-init. Das hat funktioniert.
– Maurits
5. September 2014 um 14:02 Uhr
Auch ich hatte Probleme, dies zu lösen, @maurits Kommentar führte mich zu diesem stackoverflow.com/questions/22348886 Viel Spaß!
– Michael
5. Dezember 2014 um 16:19 Uhr
Die Dokumentation von Angular besagt, dass der Controller $scope besser zum Initialisieren dieser Art von Werten verwendet werden sollte docs.angularjs.org/api/ng/directive/ngInit
– Fortune
17. März 2015 um 14:01 Uhr
Warnung: Die Verwendung von ng-init für diesen Zweck kann zu übermäßigen Aufrufen der $digest()-Methode führen, was dazu führen kann, dass Ihre Konsolenausgabe mit Meldungen wie „10 $digest()-Iterationen erreicht. Abbruch!“ ganz rot und hässlich aussieht.
– DMac der Zerstörer
27. April 2015 um 22:27 Uhr
Ben Lesh
Wenn Sie sicherstellen möchten, dass Ihre $scope.somethingHere value nicht überschrieben wird, wenn Ihre Ansicht initialisiert wird, sollten Sie zusammenführen (somethingHere = somethingHere || options[0].value) den Wert in Ihrem ng-init wie folgt:
<select ng-model="somethingHere"
ng-init="somethingHere = somethingHere || options[0].value"
ng-options="option.value as option.name for option in options">
</select>
Diese Lösung hat gut funktioniert und ist besser als die ausgewählte Antwort.
– Michael Allan Jackson
7. März 2014 um 15:16 Uhr
sollte ng-init nicht so aussehen ng-init=”somethingHere = somethingHere || options[0]” ??
– Endlosschleife
25. Juli 2014 um 15:07 Uhr
Wie man damit umgeht options leer sein? Wie im Fall von options Die Daten stammen aus einer externen Quelle.
– Null
4. Mai 2015 um 21:11 Uhr
@suud Sie müssen nur die Optionen && options.length > 0 in Ihrem ng-init überprüfen. Wirklich, das meiste davon sollte in Ihrem Controller erledigt werden, also ist es testbar.
– Ben Lesh
5. Mai 2015 um 17:11 Uhr
@BenLesh Wenn ich anstelle der ersten Option einen Text (String) schreiben möchte.ng-init="somethingHere= somethingHere || 'Select one' " Ich habe es so versucht. aber es hat nicht funktioniert. was ist in meinem Code falsch
– Codelerner
28. März 2016 um 7:01 Uhr
Michael Benford
Versuche dies:
HTML
<select
ng-model="selectedOption"
ng-options="option.name for option in options">
</select>
Noch ein Plunker Hier unter Berücksichtigung des oben Gesagten.
Das Problem ist, dass ich dies für viele Auswahlfelder tun müsste.
– iConnor
12. August 2013 um 19:07 Uhr
Habe es nicht verstanden. Was müssten Sie tun?
– Michael Benford
12. August 2013 um 19:15 Uhr
Ich müsste es vielleicht manuell machen 50+ Kästchen auswählen
– iConnor
12. August 2013 um 19:20 Uhr
Sie meinen, den Standardwert für jede Auswahlbox festzulegen? Wenn ja, denke ich, dass das in Ihrer Frage nicht klar ist. Wie auch immer, gehe ich richtig in der Annahme, dass Sie die Artikel in jede Auswahlbox laden müssten? Wenn ja, denke ich nicht, dass die Initialisierung ihrer Standardwerte eine große Sache wäre.
– Michael Benford
12. August 2013 um 19:46 Uhr
Mein Problem ist, dass der Index der Option von einem “Submit” im Formular zurückgegeben wird. Was ich brauche, ist das, was Sie Option.name nennen, was von einem einfachen alten Rails-Formular zurückgegeben wurde. Das Kontrollkästchen und die Optionsfelder funktionieren einwandfrei, da Sie ng-repeat verwenden, um das richtige Markup zu erhalten. Wie erhalte ich die Option „option.name“, die zum Zeitpunkt der Formularübermittlung zurückgegeben wird?
– pferrel
4. Januar 2014 um 0:53 Uhr
Michail-t
Nur eine Antwort von Srivathsa Harish Venkataramana erwähnt track by das ist in der Tat eine Lösung dafür!
Hier ist ein Beispiel zusammen mit Plunker (Link unten) zur Verwendung track by in auswählenng-options:
<select ng-model="selectedCity"
ng-options="city as city.name for city in cities track by city.id">
<option value="">-- Select City --</option>
</select>
Wenn selectedCity ist auf Winkelbereich definiert, und es hat id Eigenschaft mit dem gleichen Wert wie jede id von irgendwelchen city auf der cities Liste, es wird beim Laden automatisch ausgewählt.
Ich denke, nach der Aufnahme von „track by“ können Sie es in ng-options verwenden, um das zu bekommen, was Sie wollten, wie im Folgenden
<select ng-model="somethingHere" ng-options="option.name for option in options track by option.value" ></select>
Diese Vorgehensweise ist besser, denn wenn Sie die Liste der Zeichenfolgen durch die Liste der Objekte ersetzen möchten, ändern Sie dies einfach in
<select ng-model="somethingHere" ng-options="object.name for option in options track by object.id" ></select>
wobei irgendetwasHere natürlich ein Objekt mit den Eigenschaften name und id ist. Bitte beachten Sie, dass ‘as’ nicht auf diese Weise verwendet wird, um die ng-Optionen auszudrücken, da es nur den Wert festlegt und Sie ihn nicht ändern können, wenn Sie track by verwenden
Das hat bei mir funktioniert. Ich denke, eckig brauchte etwas, um das Objekt im Modell meines Zielfernrohrs als äquivalent zu einer Auswahl der Referenzliste zu identifizieren. “track by guarantor.code” hat es geschafft!
– markglatzköpfig
9. Juni 2014 um 11:00 Uhr
Die akzeptierte Antwort verwenden ng-initaber dokumentieren sagt, ng-init möglichst zu vermeiden.
Die einzig angemessene Verwendung von ngInit ist das Aliasing spezieller Eigenschaften von ngRepeat, wie in der Demo unten zu sehen ist. Abgesehen von diesem Fall sollten Sie Controller anstelle von ngInit verwenden, um Werte in einem Bereich zu initialisieren.
Sie können auch verwenden ng-repeat anstatt ng-options für Ihre Optionen. Mit ng-repeatkönnen Sie verwenden ng-selected mit ng-repeat besondere Eigenschaften. dh $index, $odd, $even, damit dies ohne Codierung funktioniert.
$first ist eine der besonderen Eigenschaften von ng-repeat.
———————- BEARBEITEN —————-
Obwohl dies funktioniert, würde ich die Antwort von @mik-t bevorzugen, wenn Sie wissen, welchen Wert Sie auswählen müssen, https://stackoverflow.com/a/29564802/454252, der verwendet wird track-by und ng-options ohne zu benutzen ng-init oder ng-repeat.
Diese Antwort sollte nur verwendet werden, wenn Sie das erste Element auswählen müssen, ohne zu wissen, welchen Wert Sie auswählen müssen. Zum Beispiel verwende ich dies für die automatische Vervollständigung, bei der ständig das ERSTE Element ausgewählt werden muss.
Das hat bei mir funktioniert. Ich denke, eckig brauchte etwas, um das Objekt im Modell meines Zielfernrohrs als äquivalent zu einer Auswahl der Referenzliste zu identifizieren. “track by guarantor.code” hat es geschafft!
– markglatzköpfig
9. Juni 2014 um 11:00 Uhr
Meine Lösung dafür war die Verwendung von HTML, um meine Standardoption fest zu codieren. So:
In HAML:
%select{'ng-model' => 'province', 'ng-options' => "province as province for province in summary.provinces", 'chosen' => "chosen-select", 'data-placeholder' => "BC & ON"}
%option{:value => "", :selected => "selected"}
BC & ON
Im HTML-Format:
<select ng-model="province" ng-options="province as province for province in summary.provinces" chosen="chosen-select" data-placeholder="BC & ON">
<option value="" selected="selected">BC & ON</option>
</select>
Ich möchte, dass meine Standardoption alle Werte von meiner API zurückgibt, deshalb habe ich einen leeren Wert. Entschuldigen Sie auch meinen Haml. Ich weiß, dass dies keine direkte Antwort auf die Frage des OP ist, aber die Leute finden dies bei Google. Hoffe, das hilft jemand anderem.
Ich habe versucht, dies umzuwandeln html aber es ist bei allen Online-Konvertern fehlgeschlagen, die ich ausprobiert habe.
– iConnor
13. Mai 2014 um 18:09 Uhr
Warum nicht HTML posten? Ich meine, war es wirklich notwendig, den Code so zu posten? Es ist nicht so, als hätte das OP in der Frage eine Vorlagen-Engine verwendet.
– arg20
20. Juni 2014 um 1:03 Uhr
9287700cookie-checkSo haben Sie eine Standardoption im Auswahlfeld von Angular.jsyes
Es wäre schön, wenn es eine Antwort gäbe, die nicht davon ausgeht, dass Winkel zum Erstellen der Optionen verwendet wird. Was ist, wenn die Optionen bereits Teil des Markups sind?
– pspahn
9. April 2015 um 18:57 Uhr
@pspahn – laut docs.angularjs.org/api/ng/directive/ngOptions: nur
a **single** hard-coded <option> element ... can be nested into the <select> element.
Die Optionen dürfen nicht bereits Teil des Markups sein.– Der DIMM-Reaper
19. August 2015 um 17:31 Uhr
@pspahn das würde das OP nicht beantworten, aber eine ganz andere Frage …
– Mario Truco
11. August 2016 um 8:30 Uhr