Я пытаюсь использовать ng-options с <select>
, чтобы связать числовое целочисленное значение со списком соответствующих параметров. В моем контроллере у меня есть что-то вроде этого:
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>
И вот jsFiddle, демонстрирующий проблему, и некоторые другие подходы, которые я предпринял, но меня не устраивает.
Параметр select инициализируется пустым значением, а не "mV", как ожидалось в этом примере. Связывание, кажется, работает нормально, если вы выберете другой вариант - selectedUnitOrdinal обновляется должным образом.
Я заметил, что если вы установите начальное значение модели на строку вместо числа, тогда начальный отбор будет работать (см. # 3 в скрипте).
Мне действительно хотелось бы, чтобы ng-options играли хорошо с числовыми значениями опций. Как я могу достичь этого элегантно?