2014-09-19 111 views
4

我有來自後端的數據列表,我想更新視圖中的選擇值,這是因爲某些原因沒有發生。在ng選項中選擇不更新

我試過ng-selected,不能有效地工作,有時模型更新spmetimes不。

這裏是我的代碼,有人可以幫忙嗎?

<div class="listitem" ng-repeat="d in data"> 
     {{d.name}}: 
     <select 
      ng-model="d.option"     
      ng-options="d.name for d in options"></select> 
    </div> 

控制器

var myApp = angular.module('myApp', []); 
myApp.controller("SomeController", function($scope) { 
    $scope.options = [{ 
     "id": "id1", 
     "name": "p1" 
    }, { 
     "id": "id2", 
     "name": "p2" 
    }]; 
    $scope.data = [{ 
     "name": "data1", 
     "option": { 
      "id": "id1", 
      "name": "p1" 
     } 
    }]; 
}); 

http://jsfiddle.net/gFCzV/58/

+0

你爲什麼沒有在這裏發佈你的代碼? – Satpal 2014-09-19 12:30:15

回答

3

您需要使用select as label group by group for value in array track by trackexpr,閱讀DOCs

ng-options="option.name for option in options track by option.id" 

DEMO,但是請注意,這將無法工作在Angualrjs 1.1

+2

我試過這個,但它不工作。即使我在演示中看到它不會更新。你能重新檢查嗎? – 2014-09-19 12:41:04

+3

對象不更新,但是我沒有看到選擇選項中的更新值,這是我的問題:) – 2014-09-19 12:44:02

+0

在您的演示中不起作用 – sbedulin 2016-02-01 13:04:28

0

你在你的代碼:

$scope.options = [{ 
    "id": "id1", 
    "name": "p1" 
}, { 
    "id": "id2", 
    "name": "p2" 
}]; 

$scope.data = [{ 
    "name": "data1", 
    "option": { 
     "id": "id1", 
     "name": "p1" 
    } 
}]; 

但角度並不知道,在$scope.options收集使用過的第一選擇對象是相同$scope.data使用option

我可以建議兩種解決方案:

  1. $scope.data只保留選項標識符"option": "id1"ng-options使用d.id as d.name for d in options

  2. ng-options使用"ng-options="d as d.name for d in options"和初始化像"option": $scope.options[0]$scope.data選項,但因爲它是未來從後端您可能需要手動修復引用。

選項1是更好的恕我直言。

編輯:實例的jsfiddle在角1.1創建的,如果你用角1.2或更高版本@Satpal track by答案也是不錯的選擇(沒有雙關語)。