When Angular generates the HTML select options, the value attribute (of each option element) might not be what you would expect... it is set as follows: . when using array as the datasource, the value is set to the array index . when using object as the datasource, the value is set to the key/property name
When the the user selects one of the options, Angular uses the index (or key) to lookup the value in array (or object) -- that looked-up value is what the model is set to. (So, the model is not set to the value you see in the HTML! This causes a lot of confusion.)
E.g., for an array datasource, Angular will set the model value to the value in the array at the index specified by the selected option value parameter. If your datasource array is [ 2013, 2014, 2015], the generated HTML will have values of 0, 1, 2 for the options elements. If you select the 2nd item, Angular looks in array[1] to find the value 2014, which is what the model is then set to
Source:Mark RajCok comment on http://docs.angularjs.org/api/ng.directive:select