修复角度排序

Chr*_*alo 1 javascript sorting angularjs

Angular在"津巴布韦"之后排序"奥兰群岛".我想以全球方式解决这个问题.orderBy我想以某种方式全局修补默认排序函数,而不是创建自定义排序函数并在每个过滤器中指定它.这可能吗?

首先使用以下函数对两个字符串进行规范化,问题得到解决:

function norm(str) {
  str = str.toLowerCase();
  str = str.replace(/\\s/g, "");
  str = str.replace(/[àáâãäå]/g, "a");
  str = str.replace(/æ/g, "ae");
  str = str.replace(/ç/g, "c");
  str = str.replace(/[èéêë]/g, "e");
  str = str.replace(/[ìíîï]/g, "i");
  str = str.replace(/ñ/g, "n");
  str = str.replace(/[òóôõö]/g, "o");
  str = str.replace(/œ/g, "oe");
  str = str.replace(/[ùúûü]/g, "u");
  str = str.replace(/[ýÿ]/g, "y");
  str = str.replace(/\\W/g, "");
  return str;
}
Run Code Online (Sandbox Code Playgroud)

我希望在Angular中有一种方法可以做到这一点,再也不用担心了.

Voj*_*jta 5

您可以自己规范化:

var normalize = function(str) {
  return str.toLowerCase().
             replace(/[àáâãäå]/g, "a");
             // ...
};

app.controller('MainCtrl', function($scope) {
  $scope.items = [
    {name: 'Åland Islands'},
    // ...
  ];

  $scope.normalizedName = function(item) {
    return normalize(item.name);
  };
});
Run Code Online (Sandbox Code Playgroud)

然后在html中使用:

<li ng-repeat="item in items | orderBy:normalizedName">{{item.name}}</li>
Run Code Online (Sandbox Code Playgroud)

这是关于plunker的整个例子.