angular:使用ng-options的奇怪行为

时间:2015-01-11 21:58:57

标签: angularjs ng-options angularjs-ng-options

我偶然发现了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。任何人都知道如何解决这个问题?

1 个答案:

答案 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);
}

Demo