【问题标题】:Angular.JS how to override "compare(v1, v2)" methodAngular.JS如何覆盖“比较(v1,v2)”方法
【发布时间】:2015-07-01 16:40:09
【问题描述】:

为了能够修复排序问题,我需要更改 Angular 库的比较方法。到目前为止,我只是直接更改了 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;
      }
    }
  };
}

【问题讨论】:

标签: javascript angularjs overriding


【解决方案1】:

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

您是否研究过非常基本的 JavaScript .sort()

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.sort(function(item1, item2) {
    return item1 > item2; //Do whatever you need here
});

如果您在某些特殊情况下需要它,例如在 ng-repeat 中,请查看 Custom sort function in ng-repeat

更新

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

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

在任何一种情况下,您都可以通过以下方式覆盖错误 orderBy 过滤器:

// 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);
       }
   }
});

希望这会有所帮助 =)

【讨论】:

  • 感谢 Stoyan 展示了另一种方式。但是,由于我想保留常规的 ng-repeat orderBy 语法(带有字符串的语法)并且原始的 compare 方法在变音符号上表现不佳,我真的很想覆盖它。
  • 请查看更新,如果您有任何问题,请告诉我。
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2012-01-04
相关资源
最近更新 更多