2015-01-11 48 views
1

我偶然發現了ng選項的一個奇怪問題。舉一個簡單的選擇:angular:使用ng選項的奇怪行爲

<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顯示空白。

什麼?

這是一個plunk演示。

這是一個問題,顯示與角1.2.26。早期版本沒問題(你可以通過更改plunk使用的角度版本來看到這一點)。

但我的項目有各種依賴和涼亭不斷推動我的角度到1.2.29。任何人都知道我可以如何解決這個問題?

+0

有趣。似乎是1.2.26/1.2.28中的一個錯誤。如果你切換到1.3,它工作正常。 – pixelbits

回答

0

這似乎是版本1.2.26/1.2.28中的錯誤,但適用於1.3。*。

我已經提交這是一個問題角度:

https://github.com/angular/angular.js/issues/10718

要解決此問題,在您的ngController初始化變量的作用域($超時以外):

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

1

我有同樣的問題,並最終通過告訴css不顯示這些選項來解決它:

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

這會告訴CSS不顯示任何帶有以「?」開頭的值屬性值的選項。 (請注意,問號必須轉義。)