Ich versuche, ng-Optionen mit einem <select>
zu verwenden, um einen numerischen ganzzahligen Wert an eine Liste der entsprechenden Optionen zu binden. In meinem Controller habe ich so etwas wie dieses:Angularjs ng-Optionen mit der Nummer für das Modell wählt nicht den Anfangswert
myApp.controller('MyCtrl', function() {
var self = this;
var unitOptionsFromServer = {
2: "mA",
3: "A",
4: "mV",
5: "V",
6: "W",
7: "kW"
};
self.unitsOptions = Object.keys(unitOptionsFromServer).map(function (key) {
return { id: key, text: unitOptionsFromServer[key] };
});
self.selectedUnitOrdinal = 4; // Assume this value came from the server.
});
HTML:
<div ng-controller="MyCtrl as ctrl">
<div>selectedUnitOrdinal: {{ctrl.selectedUnitOrdinal}}</div>
<select ng-model="ctrl.selectedUnitOrdinal" ng-options="unit.id as unit.text for unit in ctrl.unitsOptions"></select>
</div>
Und hier ist ein jsFiddle das Problem demonstriert und einige andere Ansätze, die ich habe getroffen, aber bin nicht glücklich mit.
Die Auswahloption wird mit einem leeren Wert anstelle von "mV" initialisiert, wie in diesem Beispiel erwartet. Die Bindung scheint gut zu funktionieren, wenn Sie eine andere Option auswählen - ausgewählte UnitsOrdinal Updates ordnungsgemäß.
Ich habe festgestellt, dass wenn Sie den ursprünglichen Modellwert auf eine Zeichenfolge anstelle einer Zahl festlegen, dann funktioniert die anfängliche Auswahl (siehe # 3 in der Geige).
Ich möchte wirklich ng-Optionen mit numerischen Option Werte schön zu spielen. Wie kann ich das elegant erreichen?
die meiste Zeit wäre * convert-to-string *, ändern Sie einfach * parseInt * in * String * –
Dies sollte die akzeptierte Antwort sein, da sie allgemeiner ist und nicht von 'ng-Optionen' abhängt. Beachten Sie auch, dass dies nicht für eine Zahl, sondern nur für Ganzzahlen gilt. Wenn Floats funktionieren sollen, verwenden Sie 'parseFloat()', aber wenn Sie Floats für Gleichheit vergleichen, tun Sie wahrscheinlich etwas sehr, sehr falsches. –
Schöne Lösung. Aber wenn Sie 0 in Ihren Auswahloptionen haben, gibt es null wegen der Implementierung. Für diesen Fall ist eine kleine Optimierung erforderlich. – user1776573