2014-04-30 7 views
21

मैं ऑब्जेक्ट्स की सरणी में आईडी द्वारा चयन ट्रैक करने के लिए 'ट्रैक बाय' अभिव्यक्ति का उपयोग करने का प्रयास कर रहा हूं। हालांकि, मुझे ऐसा काम नहीं लगता है जैसे मुझे लगता है कि यह काम करता है।ngOptions "ट्रैक द्वारा" अभिव्यक्ति

//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> 

तो documentation के आधार पर मैं यह है कि लोड पर विकल्पों के निर्देश है कि serverDTO की 1, 2, और 3, और आईडी है उन पूर्व चयनित 'द्वारा ट्रैक' है देखना होगा। उपयोगकर्ता चयन को संशोधित करने के बाद मैं सर्वर

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

मैं जिस तरह से है कि यह कैसे काम करने के लिए माना जाता है पर बंद हूँ करने के लिए सरणी वापस जाने के लिए इस तरह कुछ करने के लिए की आवश्यकता होगी?

+0

एनजी-विकल्प = "आइटम item.name के रूप में आइटम के लिए composedData ट्रैक में आइटम द्वारा

$ scope.serverDTO" द्वारा ट्रैक "के साथ अपने मामले में

{:: 1, नाम" परीक्षण "id} की तरह होना चाहिए .id "><--- मेरे लिए एक आकर्षण की तरह काम किया, धन्यवाद –

उत्तर

33

track by जहां तक ​​मुझे पता है सरणी सॉर्टिंग के साथ आंतरिक रूप से कोणीय में मदद करता है। विकल्पों का मान पहली तर्क (आपके मामले में item) द्वारा परिभाषित किया गया है। यदि आप आईडी द्वारा होना चाहते हैं तो आपको item.id as item.name for item in items

5

"ट्रैक बाय" उपयोगी है जब ऑब्जेक्ट्स और मॉडल के एनजी-विकल्प सरणी में आप वस्तु का उपयोग करते हैं। लेकिन आप मॉडल में ऑब्जेक्ट के संदर्भ से ट्रैक विकल्प नहीं चाहते हैं। "ट्रैक द्वारा" का उपयोग करके आप इंगित करते हैं कि आप मॉडल के वांछित क्षेत्र द्वारा विकल्पों को ट्रैक करते हैं।

संबंधित मुद्दे