1

我偶然发现了一个关于 ng-options 的奇怪问题。考虑一个简单的选择:

<select ng-model="x" ng-options="n for n in [1,2,3]"></select>

在控制器中分配模型值的位置:

$scope.x = 3;

这很好用;选择元素显示 3。但是,如果分配延迟

$timeout(function() { $scope.x = 3 }, 50);

选择显示为空白。但前提是模型值是列表中的最后一个选项!换句话说,这很好用:

$timeout(function() { $scope.x = 2 }, 50);

然后选择元素显示 2。与 1 相同。但 3 显示为空白。

什么?

这是一个演示

这是 angular 1.2.26 出现的问题。早期版本还可以(您可以通过更改 plunk 使用的角度版本来亲自查看)。

但是我的项目有各种依赖项,bower 不断将我的角度推到 1.2.29。有人知道我如何解决这个问题吗?

4

2 回答 2

1

我遇到了同样的问题,最终通过告诉 css 不要显示这些选项来解决它:

option[value^=\?]{
    display: none;
}

这具有告诉 CSS 不显示任何带有以“?”开头的 value 属性值的选项的效果。(请注意,问号必须转义。)

于 2015-08-27T21:42:32.883 回答
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);
}

演示

于 2015-01-11T22:51:21.937 回答