2015-04-07 7 views
5

कोणीय जेएस के ngRepeat निर्देश का उपयोग करके, मैं इसे कैसे बना सकता हूं ताकि परिणामी पुनरावृत्ति विपरीत क्रम में जा सके? मैं एक ऑब्जेक्ट का उपयोग कर रहा हूं जहां कुंजी संख्याएं हैं, और मैं उन लोगों द्वारा क्रमबद्ध करना चाहता हूं, अवरोही।ऑब्जेक्ट की कुंजी द्वारा कोणीय ngRepeat के क्रम को कैसे उलटें, जो संख्यात्मक

मुझे पता है कि आप वास्तव में इस तरह की कुंजी (किसी सरणी के संदर्भ के बिना) द्वारा किसी ऑब्जेक्ट को सॉर्ट नहीं कर सकते हैं, लेकिन क्या यह कोणीय के साथ संभव है?

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script> 
 

 
<body> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
    app.filter('orderObjectBy', function() { 
 
     return function(items, field, reverse) { 
 
     var filtered = []; 
 
     angular.forEach(items, function(item) { 
 
      filtered.push(item); 
 
     }); 
 
     filtered.sort(function(a, b) { 
 
      return (a[field] > b[field] ? 1 : -1); 
 
     }); 
 
     if (reverse) filtered.reverse(); 
 
     return filtered; 
 
     }; 
 
    }); 
 
    app.controller('myController', ['$scope', 
 
     function($scope) { 
 
     $scope.data = { 
 
      2013: 'oldest 4', 
 
      2014: 'older 3', 
 
      2015: 'new 2', 
 
      2016: 'newest 1' 
 
     }; 
 
     } 
 
    ]); 
 
    </script> 
 
    <div id="myApp" ng-app='myApp' ng-controller="myController"> 
 
    <div ng-repeat="(date,text) in data">{{text}}</div> 
 
    <hr/> 
 
    <div ng-repeat="(date,text) in data | orderBy:date:reverse">{{text}}</div> 
 
    <hr/> 
 
    <div ng-repeat="(date,text) in data | orderBy:'-date'">{{text}}</div> 
 
    <hr/> 
 
    <div><b>Correct Answer!:</b></div><hr/> 
 
    <div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div> 
 
    </div> 
 

 
</body>

उदाहरण के लिए, मैं सबसे पुराना

+0

आप उलटे क्रम तो बस डाल में दिनांक के आधार पर ऑर्डर करने के लिए चाहते हैं। '' तो कोड डेटा में "(तिथि, पाठ) होगा। ऑर्डर द्वारा: '- दिनांक'" – Anita

+0

फ़िल्टर का उपयोग करें .. मेरा मतलब है-ng-repeat = '(दिनांक, टेक्स्ट) डेटा एस में | orderBy: दिनांक: रिवर्स ' – Ved

+0

धन्यवाद दोस्तों, लेकिन मैंने कोशिश की है कि मेरे प्रश्न में अद्यतन कोड के साथ यह काम नहीं कर रहा है। –

उत्तर

5

एनजी-दोहराने doen't काम (क्या इस कोड में करता है के विपरीत) के लिए सबसे हाल का व्यवस्थित करने के लिए इस चाहते हैं इसके लिए ऑब्जेक्ट के साथ आपको अपना कस्टम फ़िल्टर बनाना होगा। फ़ील्ड नाम से पहले -

<div ng-repeat="(date,text) in data | orderObjectBy:date:true">{{text}}</div> 

app.filter('orderObjectBy', function() { 
    return function(items, field, reverse) { 
    var filtered = []; 
    angular.forEach(items, function(item) { 
     filtered.push(item); 
    }); 
    filtered.sort(function (a, b) { 
     return (a[field] > b[field] ? 1 : -1); 
    }); 
    if(reverse) filtered.reverse(); 
    return filtered; 
    }; 
}); 

Plunker

आशा है कि यह मदद करता है :)

+1

धन्यवाद! वास्तव में बहुत उपयोगी है। –

+0

@d -_- बी आपकी मदद करने में प्रसन्न है :) – squiroid

+0

वास्तव में 'ng-repeat' ऑब्जेक्ट के साथ काम करता है (यानी इसकी गुणों को पुन: सक्रिय कर सकता है)। यह 'ऑर्डर बी' है जो सरणी के अलावा कुछ भी सॉर्ट नहीं कर सकता है। – Javarome

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