1

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 は空白で表示されます。

何?

これが示すプランクです。

angular 1.2.26 で発生する問題です。以前のバージョンは問題ありません (これは、plunk で使用される角度バージョンを変更することで確認できます)。

しかし、私のプロジェクトにはあらゆる種類の依存関係があり、bower は私の角度を 1.2.29 にプッシュし続けています。この問題を回避する方法を知っている人はいますか?

4

2 に答える 2

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 に答える