2015-12-16 15 views
7

1.2.14から1.4.8への移行時にこれが発生しました。これは1.2.14で正常に動作しますが、無限の$ digest()のループが1.4.8に入ります。この問題を示すFiddleがあります。

:私のオプションは、このようなオブジェクト、ある

<select ng-model="selectedId" ng-options="opt.id as opt.label for opt in getOptions()"> 

:フィドルは、私はこのようになりますselect要素を持っているこの記事より見て多くの方が簡単ですが、SO私はコード

などが行っています ​​

ngOptionsディレクティブを指定するオプションの配列は条件によって異なります。時々私はただそれに$scope.optionsを与えたいが、時には別のオプションを入れたい。今

$scope.getOptions = function() { 
    if ($scope.showThirdOption) 
     return [{ id: 3, label: 'three' }].concat($scope.options); 
    else 
     return $scope.options; 
}; 

私はプログラム的に3に私のモデルを設定した場合、:

... 
$scope.selectedId = 3; 
... 

...角度は、そのオプションが存在しないにもかかわらず、動揺することはありません。 <option>ノードを<select>要素に追加すると、<option value="?" selected="selected"></option>のドロップダウンリストで選択した値が空白になります。

しかし、私は私の状態s.tを設定します。私GETOPTIONS()の追加オプションリターン:

... 
$scope.selectedId = 3; 
$scope.showThirdOption = true; 
... 

...私は無限$ダイジェスト()ループを取得します。

errors loop bad

このような問題を回避する良い方法はありますか? Angular(これは技術的には回帰)のバグだと思いますか、これはちょうど... ngOptionsを使用する方法ではありませんか?

~~~ Again, I have a nice Fiddle for you to play around with!! ~~~

+0

ここにあなたのオプションではなく、オブジェクトの値をしている場合、この問題は発生しないことを示す例です:[**のhttp://jsfiddle.net/x15jccmj/3**](のhttp:/ /jsfiddle.net/x15jccmj/3/)。 –

答えて

2

あなたはNG-オプションの関数GETOPTIONS()を呼び出すため、エラーが発生します。その後、NG-オプションでそれを使用し、新しい変数を作成し、この関数によって返された値を割り当てます。

$scope.newOptions = $scope.getOptions(); 

ng-options="opt.id as opt.label for opt in newOptions" 

はまた、ボタンのクリックでnewOptionsを更新することを忘れないでください。

その後、無限のダイジェストはありません。 更新フィドルを参照してください:http://jsfiddle.net/bbcjeuhb/

+0

ありがとう、これは素晴らしい仕事! :D –

関連する問題