2012-09-07 19 views
143

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

आपको लगता है कि $.sortBy जैसे कुछ ऐसा करेंगे लेकिन दुर्भाग्यवश यह जैक नहीं करता था। मुझे पता है कि मैं इसे जावास्क्रिप्ट के माध्यम से एक सहायक विधि function asc(a,b) या उस तरह कुछ के साथ सॉर्ट कर सकता हूं लेकिन मैं यह मानने से इनकार करता हूं कि ऐसा करने का क्लीनर तरीका नहीं है, मैं नियंत्रक को सहायक तरीके से ब्लॉउट नहीं करना चाहता हूं। यह सिद्धांत रूप में इतना बुनियादी है इसलिए मुझे समझ में नहीं आता क्यों एंगुलरजेएस में यह नहीं है।

क्या $orderBy('asc') जैसे कुछ करने का कोई तरीका है?

उदाहरण:

<select ng-option="items in item.$orderBy('asc')"></select> 

यह orderBy में विकल्प तो तुम जो चाहो कर सकते हैं के लिए अत्यंत उपयोगी हो सकता है, जब भी आप आमतौर पर डेटा को सॉर्ट करने का प्रयास करें।

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name'"></select> 

एक उदाहरण के लिए this fiddle देखें:

उत्तर

304

कोणीय एक orderBy फिल्टर है कि इस तरह इस्तेमाल किया जा सकता है।

यह ध्यान देने योग्य है कि यदि track by किया जा रहा है इसे इस तरह, orderBy फिल्टर के बाद प्रकट करने के लिए की जरूरत है लायक है:

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name' track by f.id"></select> 
+1

की तरह कर सकते हैं खोज रहे हैं पहेली में (या एंगुलर टोडो ट्यूटोरियल में एक प्रकार का चयन टैग जोड़ना), 'चयनित' के रूप में दिखाने का विकल्प प्राप्त करना - या यहां तक ​​कि दिखाने का पहला विकल्प भी प्राप्त करना - एक मुद्दा है। कोणीय के साथ यह खाली है? –

+2

@DaveEveritt डिफ़ॉल्ट सेट करने के लिए एक तरीका है (और रिक्त आइटम को निकालने के लिए) 'चयनित' के लिए बाध्य आइटम को पूर्व-चयन करना है। इस उदाहरण के लिए आप '$ scope.selected = $ scope.friends [0]' जैसे कुछ कर सकते हैं। एक कामकाजी नमूने के लिए [यह पहेली] (http://jsfiddle.net/aBccw/142/) देखें। – Gloopy

+1

मेरे लिए काम नहीं करता है, लेकिन यह हाँ: http://stackoverflow.com/a/18261445/2178340 – Gerson

23

आप फिल्टर का उपयोग करने के लिए सक्षम होना चाहिए: orderBy

orderBy एक तिहाई स्वीकार कर सकते हैं reverse ध्वज के लिए विकल्प।

<select ng-option="item.name for item in items | orderBy:'name':true"></select> 

यहाँ आइटम एक उलट क्रम में 'नाम' संपत्ति के अनुसार क्रमबद्ध किया गया है। दूसरा तर्क कोई ऑर्डर फ़ंक्शन हो सकता है, ताकि आप किसी भी नियम को सॉर्ट कर सकें।

@see http://docs.angularjs.org/api/ng.filter:orderBy

+6

या बस सूची को सॉर्ट नहीं है <चयन एनजी-विकल्प = "item.name मदों में आइटम के लिए | orderBy: '- नाम'"> भी काम करता है :) – Mahbub

0
var module = angular.module("example", []); 

module.controller("orderByController", function ($scope) { 
    $scope.orderByValue = function (value) { 
     return value; 
    }; 

    $scope.items = ["c", "b", "a"]; 
    $scope.objList = [ 
     { 
      "name": "c" 
     }, { 
      "name": "b" 
     }, { 
      "name": "a" 
     }]; 
     $scope.item = "b"; 
    }); 

http://jsfiddle.net/Nfv42/65/

+2

बताया गया हो कि पाठ का एक बिट यह ओपी के प्रश्न का उत्तर देता है और/या आप इसका उपयोग कैसे करेंगे, यह बहुत उपयोगी होगा। –

+0

@ सेन्थेबेन मैंने पहले से ही खराब डेमो दिया है इसलिए मैंने व्याख्या नहीं दी है। – TechnoCrat

+2

@TechnoCrat एक स्पष्टीकरण वैसे भी पसंद किया जाएगा। वास्तव में, यह जानना विशेष रूप से दिलचस्प होगा कि पिछले कुछ साल पहले इस समाधान को क्यों पसंद किया जाएगा। या, यह बिल्कुल अलग कैसे है ... – Chipowski

0

जो कोई तीसरी परत में चर सॉर्ट करने के लिए चाहता है के लिए:

<select ng-option="friend.pet.name for friend in friends"></select> 

आप इसे इस

<select ng-option="friend.pet.name for friend in friends | orderBy: 'pet.name'"></select>