为了能够修复排序问题,我需要更改角度库的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;
}
}
};
}
答案 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
希望这有助于=)