2014-04-30 21 views
21

Tôi đang cố gắng sử dụng biểu thức 'theo dõi' để theo dõi các lựa chọn theo id, trong một mảng các đối tượng. Tuy nhiên, tôi không thể làm cho nó hoạt động như tôi nghĩ nó hoạt động.ngOptions "theo dõi" biểu thức

//ids from server 
$scope.serverDTO = ['1','2','3']; 

//composed objects from the ID set 
$scope.composedData = [{id:1,name:"test"},{id:2,name:"test"},{id:3,name:"test"}]; 

<!-- select box --> 
<select ng-model="serverDTO" ng-options="item as item.name for item in composedData track by item.id"></select> 

Vì vậy, dựa trên documentation tôi rằng mặc dù các tùy chọn chỉ thị trên tải sẽ thấy rằng serverDTO có 'ca khúc của' id của 1, 2, và 3, và có những lựa chọn trước. Sau khi người dùng sửa đổi lựa chọn, tôi sẽ cần phải làm điều gì đó như thế này để trả lại mảng cho máy chủ-

//recreate proper DTO [1,2,3]; 
$scope.serverDTO = $scope.serverDTO.map(function(val){ 
    return val.id; 
}); 

Tôi có thể thực hiện điều này không?

+0

ng-options = "item như item.name cho mặt hàng trong composedData theo dõi bởi mục .id "><--- làm việc như một sự quyến rũ đối với tôi, cảm ơn bạn –

Trả lời

33

track by chỉ giúp Góc nội bộ với phân loại mảng theo như tôi biết. Giá trị của các tùy chọn được xác định bởi đối số đầu tiên (trong trường hợp của bạn là item). Nếu bạn muốn nó bằng id thì bạn nên sử dụng item.id as item.name for item in items

5

"theo dõi" là hữu ích khi trong mảng ng-tùy chọn của đối tượng và kiểu bạn cũng sử dụng đối tượng. nhưng bạn không muốn tùy chọn theo dõi bởi tham chiếu của đối tượng trong mô hình. Sử dụng "theo dõi", bạn chỉ ra rằng bạn theo dõi các tùy chọn theo trường mô hình mong muốn.

trong trường hợp của bạn với "ca khúc của" $ scope.serverDTO phải như {id: 1, tên: "test"}

Các vấn đề liên quan