Ich habe in den letzten Wochen mit AngularJS gearbeitet, und das einzige, was mich wirklich stört, ist, dass ich selbst nach dem Ausprobieren aller Permutationen oder der in der Spezifikation unter http://docs.angularjs.org/api/ng definierten Konfiguration .directive: select , ich erhalte immer noch eine leere Option als erstes untergeordnetes Element des select-Elements.
Hier ist die Jade:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Hier der Controller:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Schließlich ist hier der HTML-Code, der generiert wird:
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
<option value="?" selected="selected"></option>
<option value="0">Feature</option>
<option value="1">Bug</option>
<option value="2">Enhancement</option>
</select>
Was muss ich tun, um es loszuwerden?
PS: Die Dinge funktionieren auch ohne dies, aber es sieht nur seltsam aus, wenn Sie select2 ohne Mehrfachauswahl verwenden.
null
ist einer Ihrer Werte.<option>
so dass der Winkel so etwas wie<option value="?">Select an option</option>
<option value="">Select an option</option>
das ist der Nullwert der Optionsliste. Keine Notwendigkeit für? -Zeichen.Wenn Sie einen Anfangswert wünschen, lesen Sie die Antwort von @ pkozlowski.opensource, die zu Ihrer Information auch in der Ansicht (und nicht in der Steuerung) mit ng-init implementiert werden kann:
Wenn Sie keinen Anfangswert möchten, kann "ein einzelnes fest codiertes Element, dessen Wert auf eine leere Zeichenfolge festgelegt ist, in das Element verschachtelt werden. Dieses Element repräsentiert dann die Option null oder" nicht ausgewählt "":
quelle
Winkel <1,4
Für alle da draußen, die "null" als gültigen Wert für eine der Optionen behandeln (stellen Sie sich also vor, dass "null" ein Wert eines der Elemente in typeOptions im folgenden Beispiel ist), habe ich den einfachsten Weg gefunden, um sicherzustellen, dass dieser automatisch hinzugefügt wird Option ist versteckt ist ng-if zu verwenden.
Warum ng-if und nicht ng-hide? Da Sie CSS-Selektoren möchten, die auf die erste Option oben abzielen, wählen Sie "echte" Option, nicht die versteckte. Dies ist nützlich, wenn Sie Winkelmesser für e2e-Tests verwenden und (aus welchen Gründen auch immer) by.css () verwenden, um ausgewählte Optionen als Ziel festzulegen.
Winkel> = 1,4
Aufgrund des Refactorings der Direktiven select und options ist die Verwendung
ng-if
nicht mehr sinnvoll, sodass Sie sich an wenden müssenng-show="false"
, damit es wieder funktioniert.quelle
size="5"
die ausgewählten Attribute und Sie können sehen, dass nichts ausgewählt ist! Wie in einem Standard-<select>
Element! Ich kann nicht verstehen, warum Angular so etwas für Selects ohnemultiple
Attribut tut ...Vielleicht nützlich für jemanden:
Wenn Sie einfache Optionen anstelle von ng-Optionen verwenden möchten, können Sie Folgendes tun:
Stellen Sie das Modell inline ein. Verwenden Sie ng-init, um die leere Option zu entfernen
quelle
Ähnliches passierte auch mir und wurde durch ein Upgrade auf Winkel 1.5 verursacht.
ng-init
scheint in neueren Versionen von Angular nach Typ analysiert zu werden . In älteren Angularng-init="myModelName=600"
würde eine Option mit dem Wert "600" zugeordnet, dh<option value="600">First</option>
in Angular 1.5 wird dies nicht gefunden, da zu erwarten scheint, dass eine Option mit dem Wert 600 gefunden wird<option value=600>First</option>
. Angular würde dann ein zufälliges erstes Element einfügen:Winkel <1.2.x
Winkel> 1,2
quelle
ng-value="600"
in deroption
anstelle vonvalue
. Es wird es zu einer Zahl analysieren und Sie müssen Ihre Werte nicht wie jetzt konvertieren :)Unter den zahlreichen Antworten hier dachte ich, ich würde die für mich funktionierende Lösung erneut veröffentlichen und alle folgenden Bedingungen erfüllen:
value=""
)Code
src
Original-Fragen und Antworten - https://stackoverflow.com/a/32880941/1121919
quelle
<option ng-selected="true" value="null">
?Eine schnelle Lösung:
Hoffe es hilft jemandem. Im Idealfall sollte die ausgewählte Antwort der Ansatz sein. Sollte dies jedoch nicht möglich sein, sollte dies als Patch funktionieren.
quelle
Ja, ng-model erstellt einen leeren Optionswert, wenn die Eigenschaft ng-model undefiniert ist. Wir können dies vermeiden, wenn wir dem ng-Modell ein Objekt zuweisen
Beispiel
Winkelcodierung
Wichtige Notiz:
Weisen Sie dem ng-Modell ein Array-Objekt wie $ scope.collections [0] oder $ scope.collections [1] zu. Verwenden Sie keine Objekteigenschaften. Wenn Sie mithilfe der Rückruffunktion einen ausgewählten Optionswert vom Server erhalten, weisen Sie dem ng-Modell ein Objekt zu
HINWEIS aus dem Angular-Dokument
Hinweis: ngModel vergleicht nach Referenz und nicht nach Wert. Dies ist wichtig, wenn Sie an ein Array von Objekten binden. siehe ein Beispiel http://jsfiddle.net/qWzTb/
Ich habe es oft versucht, endlich habe ich es gefunden.
quelle
Obwohl die Antworten von @ pkozlowski.opensource und @ Mark korrekt sind, möchte ich meine leicht modifizierte Version freigeben, in der ich immer das erste Element in der Liste auswähle, unabhängig von dessen Wert:
quelle
Ich verwende Angular 1.4x und habe dieses Beispiel gefunden. Daher habe ich ng-init verwendet, um den Anfangswert in der Auswahl festzulegen:
quelle
Ich stand vor dem gleichen Problem. Wenn Sie ein Winkelformular mit normalem Beitrag veröffentlichen, tritt dieses Problem auf, da Sie mit dem Winkel keine Werte für die Optionen in der von Ihnen verwendeten Weise festlegen können. Wenn Sie den Wert "form.type" erhalten, finden Sie den richtigen Wert. Sie müssen das eckige Objekt selbst posten, nicht den Formularpfosten.
quelle
Eine einfache Lösung besteht darin, eine Option mit einem leeren Wert festzulegen.
""
Ich habe festgestellt, dass dadurch die zusätzliche undefinierte Option entfällt.quelle
Ok, eigentlich ist die Antwort ganz einfach: Wenn es eine Option gibt, die Angular nicht erkennt, enthält sie eine langweilige. Was Sie falsch machen, ist, wenn Sie ng-options verwenden, liest es beispielsweise ein Objekt
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
Dies ist, was Ihr Modellwert sein muss, um ihn als gleich zu bewerten. Angenommen, Sie möchten, dass der ausgewählte Wert 10 ist. Sie müssen Ihr Modell auf einen Wert wie
{ id: 10, name: test }
10 einstellen, daher wird dieser Papierkorb NICHT erstellt.Hoffe es hilft allen zu verstehen, ich hatte es schwer zu versuchen :)
quelle
Diese Lösung funktioniert bei mir:
quelle
Das hat bei mir funktioniert
quelle
Das funktioniert einwandfrei
Die Art und Weise, wie es funktioniert, ist, dass dies die erste Option darstellt, die angezeigt wird, bevor etwas ausgewählt wird, und
display:none
diese aus der Dropdown-Liste entfernt, damit Sie dies tun können, wenn Sie möchtenund dies gibt Ihnen das
select and option
vor der Auswahl, aber sobald es ausgewählt ist, verschwindet es und es wird nicht in der Dropdown-Liste angezeigt.quelle
Versuchen Sie dies in Ihrem Controller in der gleichen Reihenfolge:
quelle
Hier ist das Update:
für ein Beispiel Daten wie:
Die Auswahloption sollte folgendermaßen aussehen: -
Wenn wir
value.listCount
als schreibenvalue.listName
, wird der Text automatisch ausgefülltvalue.listName
, der Wert der ausgewählten Option ist jedochvalue.listCount
obwohl die Werte my zeigen normal 0,1,2 .. und so weiter !!!In meinem Fall
financeRef.financeLimit
greift der tatsächlich nach demvalue.listCount
und ich kann meine Manipulation im Controller dynamisch durchführen.quelle
Ich möchte hinzufügen, dass, wenn der Anfangswert von einer Bindung eines übergeordneten Elements oder einer 1.5-Komponente stammt, sicherstellen muss, dass der richtige Typ übergeben wird. Bei Verwendung
@
in der Bindung ist die übergebene Variable eine Zeichenfolge, und wenn die Optionen z. Ganzzahlen, dann wird die leere Option angezeigt.Analysieren Sie den Wert in init entweder richtig oder binden Sie ihn mit
<
und nicht@
(weniger für die Leistung empfohlen, sofern nicht erforderlich).quelle
Einfache Lösung
quelle
Eine Grind-Lösung mit jQuery, wenn Sie nicht die Kontrolle über die Optionen haben
html:
js:
quelle
Wenn Sie dieses Modell mit ng-init lösen, um dieses Problem zu lösen:
quelle
Ich hatte das gleiche Problem, ich (entferntes "ng-Modell") änderte dies:
dazu:
Jetzt funktioniert es, aber in meinem Fall wurde der Bereich von ng.controller gelöscht. Überprüfen Sie, ob Sie nicht dasselbe getan haben.
quelle
Hallo, ich hatte einige mobile jQUery-Referenzen und habe sie entfernt. Mit jQuery Mobile funktionierte eine der oben genannten Korrekturen bei mir nicht. (Es ist großartig, wenn jemand den Konflikt zwischen jQuery Mobile und Angular JS erklären kann.)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
quelle
Das einzige , was für mich gearbeitet wird mit
track by
inng-options
, wie folgt aus :quelle
ng-option
bekommt letzten Wert von Array , das ich Sollwert soll vonoption
denselect
. Es wurde nicht gelöst :(Lesen Sie das Beispiel aus der AngularJS-Dokumentation, um diese Probleme zu beheben.
Für mich geht das. Kann auch sehen, wie es hier funktioniert
quelle
Wir können CSS verwenden, um die erste Option auszublenden. In IE 10, 11 funktioniert dies jedoch nicht. Der beste Weg ist, das Element mit Jquery zu entfernen. Diese Lösung funktioniert für große Browser, die in Chrome und IE10, 11 getestet wurden
Auch wenn Sie Angular verwenden, funktioniert die Verwendung von setTimeout manchmal
quelle