Как отсортировать польские символы с помощью фильтра sortBy в angularjs? - PullRequest
1 голос
/ 08 апреля 2019

У меня проблема.Метод sortBy в методе Angularjs 1 не сортирует по алфавиту польские символы.Должны быть отсортированы: Альфред, Арис, Берт, Хора, Дора.На самом деле, есть: Альфред, Берта, Дора, Эрис, Жора.

index.html

<!DOCTYPE html>
<html ng-app="app">

  <head>
    <link data-require="bootstrap-css@*" data-semver="3.1.1" rel="stylesheet"
          href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
    <script data-require="angular.js@1.2.10" data-semver="1.2.14"
            src="http://code.angularjs.org/1.2.14/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script type="text/javascript" src="script.js"></script>
  </head>

  <body ng-controller="MainCtrl">

    <div>
      Order By:
      <select ng-model="sortorder">
          <option selected>Name</option>
          <option value="Age">Age</option>
      </select>
      <br>
      <table style="width:300px">
          <tr>
            <td>Name</td>
            <td>Age</td>      
          </tr>
          <tr ng-repeat="contact in contacts | orderBy:sortorder">
            <td>{{contact.Name}}</td>     
            <td>{{contact.Age}}</td>
          </tr>
      </table>              
      </div>  

  </body>

</html>

script.js

var app = angular.module('app', []);

app.controller('MainCtrl', ['$scope', function ($scope) {
  $scope.sortorder = 'Name';
  $scope.contacts = [
    {Name: 'Alfred', Age: 37},
    {Name: 'Berta', Age: 65},
    {Name: 'Ąhris', Age: 25},
    {Name: 'Dora', Age: 12},
    {Name: 'Ćora', Age: 12}
    ]
}]);

Пример: http://plnkr.co/edit/ZwtGPSEvlFul6cNtn7hd?p=preview

1 Ответ

2 голосов
/ 09 апреля 2019

Компаратор по умолчанию для orderBy не зависит от локали, как вы обнаружили.Вы можете получить желаемый заказ, передав пользовательский компаратор. Последний доступен с 1.5.7 .Я заметил, что вы пометили версию версией 1.6, но в вашем Plunker вы ссылаетесь на 1.2.

Компаратор занимает третий аргумент orderBy:

orderBy:<expression>:<reverse>:<comparator>

Например:

$scope.comparator = function (a, b) {
    if (a.type === 'string' && b.type === 'string') {
        return a.value.localeCompare(b.value);
    }
    return a.value - b.value;
};

Если вы добавите в $scope.contacts какие-либо дополнительные свойства, по которым нужно выполнить сортировку, обязательно расширьте компаратор для обработки типов данных.

Вот разветвленная версияваш Plunker демонстрирует это.

...