2016-01-08 2 views
0

У меня есть ng-repeat, где I orderBy-функция. Я заметил, что он работает не так, как хотелось бы, когда дело касается чувствительности к регистру.custom sortfunction, которые нечувствительны к регистру

В моем примере вы видите, что «BBBBB» предшествует «aaaaa», что неверно в моем случае. «aaaaa» следует заказать до «BBBBB».

Я не уверен, как это сделать .. Может кто-нибудь мне помочь?

http://plnkr.co/edit/ICNuVCkotSaIsfvdQGTt?p=preview

<!doctype html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Example - example-example105-production</title> 
<link href="style.css" rel="stylesheet" type="text/css"> 


<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"></script> 
<script src="script.js"></script> 



</head> 
<body ng-app="orderByExample"> 
<div ng-controller="ExampleController"> 
<table class="friend"> 

<tr> 
    <th> 
    <button ng-click="order('group')">Name</button> 
    <span class="sortorder" ng-show="predicate === 'group'" ng-class="{reverse:reverse}"></span> 
</th> 
<tr ng-repeat="friend in friends | orderBy:predicate:reverse"> 
    <td>{{friend.group}}</td> 
</tr> 
</table> 
</div> 
</body> 
</html> 

ЯШ:

(function (angular) { 
    'use strict'; 
    angular.module('orderByExample', []) 
     .controller('ExampleController', [ 
      '$scope', 
      function ($scope) { 
       $scope.friends = [ 
        { group: ['aaaaa'] }, 
        { group: ['BBBBB'] }, 
        { group: ['AAAA'] }, 
       ]; 
       $scope.predicate = 'group'; 
       $scope.reverse = false; 
       $scope.order = function (predicate) { 
        $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false; 
        $scope.predicate = 'group'; 
       }; 
      } 
     ]); 
})(window.angular); 

ответ

1

Изменить ваш предикат функции:

$scope.predicate = function(d) { return d.group[0].toLowerCase(); }; 
+0

Можете ли вы обновить плункер, пожалуйста? – MrProgram

+0

http://plnkr.co/edit/sff4Pzqsnnr63YhNLzRH?p=preview –

+0

Но он все еще меняется при повторном заказе? – MrProgram

0

Изменить предикат

$scope.predicate = function(item) { 
    return item.group.join('').toUpperCase(); 
    }; 
1

Проблема на самом деле не в этом. Это связано с тем, что ваши данные не состоят из строк. Измените структуру данных таким образом:

$scope.friends = 
    [{group:'aaaaa'}, 
    {group:'BBBBB'}, 
    {group:'AAAA'}, 
]; 
Смежные вопросы