我見過很多答案和文檔,指出您可以將屬性名稱數組傳遞給Angular的orderBy過濾器以按多個字段排序。但是,我的一個對象屬性是以文本形式存儲的數字(字段可以是「100」,「75」,「50」或「< 25」)。爲了將這些值作爲數字進行排序,我一直在使用:AngularJS按屬性和自定義過濾器排序
<div ng-repeat="item in items | orderBy:sortFunction">
{{item.itemStatus}} - {{item.itemLevel}}
</div>
//Function in controller...
$scope.sortFunction = function(item) {
return parseInt(item.itemLevel);
}
我想現在要做的是排序第一的item.itemStatus,然後通過item.itemLevel爲數字。有沒有辦法做到這一點,而不首先改變我的數據模型?我可以通過全項循環,並增加新的屬性,那就是itemLevel爲一個數字,然後過濾使用
ng-repeat="item in items | orderBy:['itemStatus','itemLevelAsNumber']
,但我想知道是否有更好的方法來做到這一點。我已經嘗試過
ng-repeat="item in items | orderBy:['itemStatus',sortFunction]
但我認爲使用該場景中的函數期望將屬性名返回爲字符串。
謝謝!
你有沒有檢查http://stackoverflow.com/questions/17037524/orderby-multiple-fields-in-angular –
我沒有一個答案做第二次排序,但我想指出,自定義比較器函數需要兩個參數,因爲函數需要在集合的兩個元素之間進行比較。如果兩個項目相等,則必須返回0;如果第一個值小於第二個值,則返回-1;如果第一個項目大於第二個項目,則返回1。 https://docs.angularjs.org/api/ng/filter/orderBy – jlafay
_但我認爲在該場景中使用函數期望將屬性名稱作爲字符串返回._不,它的工作原理與第一次相同例如[查看文檔](https://docs.angularjs.org/api/ng/filter/orderBy#api-section)so'item in items | orderBy:['itemStatus',sortFunction]'應該沒問題。通過這個[小提琴]證明(http://jsfiddle.net/wr10dLyj/) – George