2013-07-21 63 views
0

我有一個問題,我無法理解,也許有些可以讓我對「爲什麼」。ng選擇怪異行爲

  1. 我檢索後端用戶,比方說,它看起來像這樣:

    $ scope.user { ID:1, 狀態:{ ID:1, 標籤:測試 }}

  2. 我檢索所有狀態列表從後端

    $ scope.statusL IST = [{ ID:1, 標籤:測試 }, { ID:2, 標籤:託羅 }]

  3. 我想顯示的選擇輸入,包含狀態列表和與用戶身份

在我的模板預選,我有以下幾點:

<select ng-model="userStatus" ng-options="status.label for status in statusList"></select> 

在我的控制,我曾嘗試以下

案例1:預選工作

function findObject(listObject, Object){ 
    for(var i in listObject){ 
     if(listObject[i] == Object) {return listObject[i]}; 
    } 
    return listObject[0]; 
} 

$scope.userStatus = findObject($scope.statusList, $scope.user.status); 

案例2:不工作

$scope.userStatus = $scope.user.status 

案例3:不工作

$scope.userStatus = {id:2,label:toro} 

案例4:不工作

在我的模板0

,我把直接下

<select ng-model="user.status" ng-options="status.label for status in statusList"></select> 

爲什麼情況2和3的情況下也不會預選選擇框??? 更重要的是,case4對於編輯用戶而不用在新變量中拷貝everthing是非常有用的,那爲什麼它不起作用呢?

回答

0

由於角度使用===(但==將具有相同的效果),而不是angular.equals()比較每個選項與預選選項。由於您有兩個不同的對象,即使對象具有相同的鍵和值,比較也會返回false。

documentation of select中的幾條評論正在討論您所面臨的問題。

+0

那麼人們通常如何做呢?他們像case1那樣使用中間值? – VincentSerpoul

+0

我想是的。我沒有看到很多Angular的用法。剛開始自己​​使用它。很多時候,無論如何,您只需擁有用戶身份的ID即可。 –

+0

好的:'(。Quoiqu'il en soit,merci de votre aide JB Nizet – VincentSerpoul