我偶然发现了ng-options的一个奇怪问题。考虑一个简单的选择:
<select ng-model="x" ng-options="n for n in [1,2,3]"></select>
在控制器中分配模型值:
$scope.x = 3;
这很好用; select元素显示3.但是,如果赋值延迟,
$timeout(function() { $scope.x = 3 }, 50);
选择显示空白。但是仅如果模型值是列表中的最后一个选项!换句话说,这很好用:
$timeout(function() { $scope.x = 2 }, 50);
然后select元素显示2.相同处理1.但3显示空白。
什么?
这里有plunk演示。
这是一个出现角度为1.2.26的问题。早期版本没问题(您可以通过更改插件使用的角度版本来自行查看)。
但是我的项目有各种各样的依赖关系,并且bower继续将我的角度推到1.2.29。任何人都知道如何解决这个问题?
答案 0 :(得分:0)
这似乎是版本1.2.26 / 1.2.28中的错误,但适用于1.3。*。
我已将此问题提交给Angular:
https://github.com/angular/angular.js/issues/10718
要解决此问题,请在ngController中初始化范围变量(超出$ timeout):
function ctrl($scope, $timeout) {
$scope.p_immediate = 3;
$scope.s_immediate = "third";
$scope.p_delayed = 0;
$scope.s_delayed = "first";
$timeout(function() {
$scope.p_delayed = 3;
$scope.p_not_last = 2;
$scope.s_delayed = "third";
$scope.s_not_last = "second";
}, 50);
}