2013-10-04 8 views
10

मैंने अभी http://docs.angularjs.org/api/ng.filter:orderBy से सबसे सरल डेमो लिया है और केवल आयु के मूल्य को अलग-अलग अंक रखने के लिए बदल दिया है। यह उम्मीद के रूप में काम करना बंद करो। इसका क्रम "स्ट्रिंग" जैसा नहीं है "पूर्णांक" मान के रूप में। मुझे इसे कैसे बदलना चाहिए ताकि यह पूर्णांक मूल्य की तरह उम्र के अनुसार आदेश दे?कोणीय जेएस ऑर्डरबी पूर्णांक फ़ील्ड ठीक से काम नहीं कर रहा है

Plunkr डेमो यहाँ है http://plnkr.co/edit/pzgiIYrki7jUZdVaTMt9?p=preview

संहिताओं हैं:

function Ctrl($scope) { 
    $scope.friends = 
     [{name:'John', phone:'555-1212', age:'2352345'}, 
     {name:'Mary', phone:'555-9876', age:'4235243'}, 
     {name:'Mike', phone:'555-4321', age:'241'}, 
     {name:'Adam', phone:'555-5678', age:'34325'}, 
     {name:'Julie', phone:'555-8765', age:'1234'}] 
    $scope.predicate = '-age'; 
} 


<!doctype html> 
<html ng-app="App"> 
    <head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js"></script> 
<script type="text/javascript" src="script.js"></script> 
</head> 
    <body> 

<div ng-controller="Ctrl"> 
    <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> 
    <hr/> 
    [ <a href="" ng-click="predicate=''">unsorted</a> ] 
    <table class="friend"> 
    <tr> 
     <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> 
      (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> 
     <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> 
     <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> 
    </tr> 
    <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> 
     <td>{{friend.name}}</td> 
     <td>{{friend.phone}}</td> 
     <td>{{friend.age}}</td> 
    </tr> 
    </table> 
</div> 


    </body> 
</html> 
+0

मैं अन्य जवाब है कि अपने पिछले जवाब से आप –

उत्तर

18

आप संख्या टाइप करने के लिए orderBy को बनाने के लिए एकदम सही ढंग से काम करने के लिए उम्र कन्वर्ट करना होगा।

सॉर्ट करने के लिए नाव के रूप में स्ट्रिंग उम्र अपने नियंत्रक में जोड़ें:

angular.forEach($scope.friends, function (friend) { 
    friend.age = parseFloat(friend.age); 
    }); 

यह काम करना चाहिए,

देखें PLunker

+0

के लिए काम करेंगे कहा, मैं कैसे बोली हटाने या भी पूर्णांक कन्वर्ट करने के लिए googling किया गया था। यह जवाब भी मिला, इस तरह से मुझे लगता है कि इस तरह का एकमात्र समाधान होना चाहिए :) ... जब तक कि मेरी कोई बड़ी सूची न हो और उसे आगे बढ़ना पड़े, तो यह बुरा अभ्यास होगा, है ना: एस – cjmling

+1

'जब तक मैं एक बड़ी सूची है और 'के माध्यम से foreach करना था, ठीक है, लेकिन आप इसे संकलन के दौरान केवल एक बार करते हैं। मैं एक बार 85 एम जेसन 150k वस्तुओं के पूर्णांक द्वारा क्रमबद्ध। मुझे 4 सेकंड ले गए, इसलिए कोई चिंता नहीं –

+0

हटाए गए उद्धरणों के साथ परीक्षण करने का प्रयास करें या टाइमर –

1

तुम बस क्योंकि यह एक है उम्र चर में उद्धरण को दूर करने के लिए है पूर्णांक, स्ट्रिंग नहीं:

$scope.friends = 
     [{name:'John', phone:'555-1212', age:2352345}, 
     {name:'Mary', phone:'555-9876', age:4235243}, 
     {name:'Mike', phone:'555-4321', age:241}, 
     {name:'Adam', phone:'555-5678', age:34325}, 
     {name:'Julie', phone:'555-8765', age:1234}] 
11

मुझे पता है कि इस उत्तर के लिए थोड़ा देर हो चुकी है, लेकिन कोणीय के नवीनतम संस्करण में, आप फंक्शन का उपयोग ऑर्डर के रूप में कर सकते हैं (https://docs.angularjs.org/api/ng/filter/orderBy)। इस मामले में, नियंत्रक के बगल में

$scope.orderByFunction = function(friend){ 
    return parseInt(friend.age); 
}; 

की तरह एक समारोह जोड़ सकते हैं और orderBy में विधेय बदलने को फ़िल्टर

ng-repeat="friend in friends | orderBy:orderByFunction:reverse" 

इस चाल करना होगा!

+0

उपर्युक्त में जोड़कर, अगर इसे नियंत्रक में लागू किया जाना है, तो इस सरणी = ऑर्डरबी ($ स्कोप) जैसी कुछ करने की आवश्यकता है।topMacsArray, 'parseInt (गिनती, 10)', सच); जहां सही मतलब है "आदेश" उलट। –

0

कोणीयजे ने मूल्यों को क्रमबद्ध करने के लिए कार्यात्मकताओं का निर्माण किया है। लेकिन फ्लोट मानों को सॉर्ट करने से पहले हमें parseFloat() javavscript फ़ंक्शन का उपयोग करके मानों को फ़्लोट करने की आवश्यकता है।

http://hubpages.com/technology/How-to-sort-table-content-filter-table-data-and-add-pagination-using-Angular-JS

-1

जबकि json में सरणी परिवर्तित JSON_NUMERIC_CHECK कोड जोड़ें। json_encode ($ anyarray, JSON_NUMERIC_CHECK);

0

बदलने निम्नलिखित करने के लिए अपने विधेय भी काम करेगा:

<th><a href="" ng-click="predicate = '1*age'; reverse=!reverse">Age</a></th> 
संबंधित मुद्दे