Angularjs ng-options using number for model does not select initial value Angularjs ng-options using number for model does not select initial value angularjs angularjs

Angularjs ng-options using number for model does not select initial value


Angular's documentation for the ng-select directive explains how to solve this problem. See https://code.angularjs.org/1.4.7/docs/api/ng/directive/select (last section).

You can create a convert-to-number directive and apply it to your select tag:

JS:

module.directive('convertToNumber', function() {  return {    require: 'ngModel',    link: function(scope, element, attrs, ngModel) {      ngModel.$parsers.push(function(val) {        return val != null ? parseInt(val, 10) : null;      });      ngModel.$formatters.push(function(val) {        return val != null ? '' + val : null;      });    }  };});

HTML:

<select ng-model="model.id" convert-to-number>  <option value="0">Zero</option>  <option value="1">One</option>  <option value="2">Two</option></select>

Note: I found the directive from the doc does not handle nulls so I had to tweak it a little.


Maybe it's a bit messy, but result can be achieved without special functions right in ng-options

<select ng-model="ctrl.selectedUnitOrdinal" ng-options="+(unit.id) as unit.text for unit in ctrl.unitsOptions"></select>


It's because when you get the unit.id it's returning a string not an integer. Objects in javascript store their keys as strings. So the only way to do it is your approach of surrounding 4 by quotations.

Edit

<select ng-model="ctrl.selectedUnitOrdinal" ng-options="convertToInt(unit.id) as unit.text for unit in ctrl.unitsOptions"></select>$scope.convertToInt = function(id){    return parseInt(id, 10);};