Angular.JS如何覆盖"比较(v1,v2)"方法

时间:2015-07-01 16:40:10

标签: javascript angularjs override

为了能够修复排序问题,我需要更改角度库的compare-method。到目前为止,我只是直接更改了angular.js代码文件,但是当我们更新到更新的版本时,它将丢失。我读到可以覆盖javascript中的方法。

我尝试了类似的东西,但它没有完成这项工作:

angular.orderByFilter.compare = function (v2, v2) {
    //Code goes here
}

有关如何覆盖该功能的任何想法? 这是在angularjs文件中声明函数的方式:

function orderByFilter($parse) {
  return function(array, sortPredicate, reverseOrder) {

    function compare(v1, v2) {
      var t1 = typeof v1;
      var t2 = typeof v2;
      if (t1 === t2 && t1 === "object") {
        v1 = objectToString(v1);
        v2 = objectToString(v2);
      }
      if (t1 === t2) {
        if (t1 === "string") {
           v1 = v1.toLowerCase();
           v2 = v2.toLowerCase();
        }
        if (v1 === v2) return 0;
        return v1 < v2 ? -1 : 1;
      } else {
        return t1 < t2 ? -1 : 1;
      }
    }
  };
}

1 个答案:

答案 0 :(得分:0)

有许多解决方案不包括覆盖默认角度方法。您可以使用过滤器,JS排序,JQuery排序,甚至编写自己的排序函数。

您是否查看了最基本的 JavaScript .sort()

// You can use the filter using the normal orderBy syntax, e.g.:
// <div ng-repeat="item in items | orderBy : 'name' : reverse"> </div>

myApp.filter('orderBy', function() { // myApp is your angular app (duh..)
   return function(array, sortPredicate, reverseOrder) {
       if (array != undefined) { // order any way you like here
           return _.sortBy(array, sortPredicate);
       }
   }
});

如果您需要某些特殊情况,例如 ng-repeat ,请查看getter function

更新

好的,如果您真的,真的,真的需要覆盖默认过滤器,我想出了如何做到这一点。

我仍然强调,有更好的方法可以使用您自己的过滤器来实现您的目标。

在任何一种情况下,这都是您可以覆盖错误 orderBy 过滤器的方法:

grep

希望这有助于=)