这里讨论的大多数解决方案都需要使用 ngOptions 指令,而不是<option>
在 HTML 代码中使用静态元素,就像 OP 代码中的情况一样。
角 1.6.x
编辑如果您使用 Angular 1.6.x,只需使用ng-value指令,它将按预期工作。
angular.module('nonStringSelect', [])
.run(function($rootScope) {
$rootScope.model = { id: 2 };
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script>
<div ng-app="nonStringSelect">
<select ng-model="model.id">
<option ng-value="0">Zero</option>
<option ng-value="1">One</option>
<option ng-value="2">Two</option>
</select>
{{ model }}
</div>
旧版本
有一种方法可以在仍然使用静态元素的同时使其工作。它显示在 AngularJS 选择指令文档中。
这个想法是使用指令在模型上注册解析器和格式化程序。当项目被选中时,解析器将进行字符串到整数的转换,而当模型发生变化时,格式化程序将进行整数到字符串的转换。
下面的代码(直接取自 AngularJS 文档页面,不是我的功劳)。
https://code.angularjs.org/1.4.6/docs/api/ng/directive/select#binding-select-to-a-non-string-value-via-ngmodel-parsing-formatting
angular.module('nonStringSelect', [])
.run(function($rootScope) {
$rootScope.model = { id: 2 };
})
.directive('convertToNumber', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$parsers.push(function(val) {
return parseInt(val, 10);
});
ngModel.$formatters.push(function(val) {
return '' + val;
});
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="nonStringSelect">
<select ng-model="model.id" convert-to-number>
<option value="0">Zero</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
{{ model }}
</div>