使用AngularJS 1.3.0,这对我来说很有用:
var app = angular.module('myApp', []);
app.controller('MainCtrl', function($scope) {
$scope.setting = {
active: 1,
array: [{
name: 'Small',
value: 'small'
}, {
name: 'Medium',
value: 'medium'
}, {
name: 'Large',
value: 'large'
}]
}
});

<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.min.js"></script>
</head>
<body ng-controller="MainCtrl">
<select ng-model="setting.active" ng-options="i as FS.name || FS.value for (i, FS) in setting.array"></select>
</body>
</html>
&#13;
在Angular 1.3.0上,我得到了返回的这三个选项,其中&#34;活跃&#34;一个选中。现在在1.3.3上,我得到了那个空的<option value="?">
标签。
var app = angular.module('myApp', []);
app.controller('MainCtrl', function($scope) {
$scope.setting = {
active: 1,
array: [{
name: 'Small',
value: 'small'
}, {
name: 'Medium',
value: 'medium'
}, {
name: 'Large',
value: 'large'
}]
}
});
&#13;
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
</head>
<body ng-controller="MainCtrl">
<select ng-model="setting.active" ng-options="i as FS.name || FS.value for (i, FS) in setting.array"></select>
</body>
</html>
&#13;
有关如何更改ng-options
以使其再次正常工作的任何想法?
谢谢!
答案 0 :(得分:1)
因此,不完全确定导致此行为的Angular 1.3.0到1.3.3的修复程序是什么。也就是说,我注意到在浏览器中更改<select>
的值现在返回一个字符串而不是一个整数(&#34; 0&#34;而不是0)。
将active: 1
更改为active: "1"
解决了这个问题,但这并不理想。
答案 1 :(得分:1)
请注意,即使您的源是数组,您也使用通常用于对象数据源的ngOptions
参数的版本。因此,AngularJS假设它可以安全地将其视为一个对象,尤其是为了获得放在i
变量中的键。确实是通过调用内部sortedKeys()
函数来完成的,定义了here:
function sortedKeys(obj) {
return Object.keys(obj).sort();
}
这不是什么大问题,数组可以很容易地在对象中转换。但是如果数组的键是数字的,则对象的键是字符串。因此,i
变量也是一个字符串!
以前这不是问题,因为与selectAs
部分的比较并不严格,例如42 == '42'
。但自AngularJS 1.3.2中的this change以来不再是的情况。
除了修改你的对象以包含数字键并在selectAs
部分中使用它之外,你还有两个简单的解决方案来解决这个问题。第一种是在模型中使用字符串as you've suggested:
$scope.setting.active = '1';
另一个是强制selectAs
部分为数字,例如乘以1:
<select ng-model="setting.active" ng-options="i*1 as FS.name || FS.value for (i, FS) in setting.array"></select>