dee*_*kay 34 javascript angularjs
我正在订购我的数据并且其工作正常,除了一些字段为空或没有价值.订购时,这些空字段首先出现.例如,在订购数字时,我们会在获得"0"值之前得到一个巨大的空列表.
我这样做是这样的:
ng-click="predicate = 'name'; reverse=!reverse"
Run Code Online (Sandbox Code Playgroud)
和
ng-repeat="name in names | orderBy:predicate:reverse"
Run Code Online (Sandbox Code Playgroud)
JSFiddle:http://jsfiddle.net/JZuCX/1/
有一种简单优雅的方法来解决这个问题吗?无论如何,我希望空场能够持久.
Sea*_*ean 59
如何排序字符串:
item in (items|orderBy:['!name', 'name'])
Run Code Online (Sandbox Code Playgroud)
的优点(除了是更简洁)是它排序null&undefined与空白字符串.
在我的情况下,我希望顶部的空白和空值和未定义(默认情况下为nulls和undefineds排序到底部),所以我使用:
item in (items|orderBy:['!!name', 'name'])
Run Code Online (Sandbox Code Playgroud)
Kla*_*r_1 41
我写了一个过滤器,它从有序数组中获取空名称的项目,并将它们放在最后:
<li ng-repeat="item in (items|orderBy:'name'|emptyToEnd:'name')">{{item.name}}</li>
Run Code Online (Sandbox Code Playgroud)
代码可能如下所示:
.filter("emptyToEnd", function () {
return function (array, key) {
if(!angular.isArray(array)) return;
var present = array.filter(function (item) {
return item[key];
});
var empty = array.filter(function (item) {
return !item[key]
});
return present.concat(empty);
};
});
Run Code Online (Sandbox Code Playgroud)
工作实例.
顺便说一下,你的小提琴不包含任何相关的代码.你使用了错误的链接吗?
更新2: 你的过滤器的小提琴.
sha*_*non 16
此解决方案扩展了 angularJs orderBy过滤器的正常功能,以获取第三个参数,指定是否反转null和undefined值的正常排序.它观察它传递的属性名称(不仅仅是一个),并且不会像其他一些解决方案那样迭代项目.它的使用方式如下:
<li ng-repeat="item in (items|orderBy:'name':false:true)">{{item.name}}</li>
Run Code Online (Sandbox Code Playgroud)
我找到了一堆线程,有些不是直接的orderBy,并且编译了他们的技术加上我自己的几个部分:
angular.module('lib')
.config(['$provide', function ($provide) {
$provide.decorator('orderByFilter', ['$delegate', '$parse', function ($delegate, $parse) {
return function () {
var predicates = arguments[1];
var invertEmpties = arguments[3];
if (angular.isDefined(invertEmpties)) {
if (!angular.isArray(predicates)) {
predicates = [predicates];
}
var newPredicates = [];
angular.forEach(predicates, function (predicate) {
if (angular.isString(predicate)) {
var trimmed = predicate;
if (trimmed.charAt(0) == '-') {
trimmed = trimmed.slice(1);
}
var keyFn = $parse(trimmed);
newPredicates.push(function (item) {
var value = keyFn(item);
return (angular.isDefined(value) && value != null) == invertEmpties;
})
}
newPredicates.push(predicate);
});
predicates = newPredicates;
}
return $delegate(arguments[0], predicates, arguments[2]);
}
}])
}]);
Run Code Online (Sandbox Code Playgroud)
要逐字使用此代码,请将"lib"指定为应用程序的依赖项.
致记:
| 归档时间: |
|
| 查看次数: |
22294 次 |
| 最近记录: |