AngularJS: 如何编写升序排序过滤器
AngularJS: How to write ascending sort filter
我正在学习 AngularJS
并作为尝试编写升序排序过滤器的练习:
这是我的 html 文件:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="../Scripts/angular.min.js"></script>
<script src="../Scripts/Controllers/app.js"></script>
</head>
<body ng-app="myApp">
<ul ng-init="names = ['Peter','Anton','John']">
<li ng-repeat="name in names | sortAscending ">
<span>{{name}}</span>
</li>
</ul>
</body>
</html>
这是我的过滤器:
app.filter("sortAscending", function () {
return function (input) {
var result = [];
for (var i = 0; i < input.length; i++) {
if (input[i] > input[i + 1]) {
result.push(input[i]);
}
}
return result;
}
});
我觉得关于比较值的循环有问题。
我做错了什么?
orderBy 怎么样:
<ul ng-init="names = [{name:'Peter'}, {name:'Anton'}, {name: 'John'}]">
<li ng-repeat="name in names | orderBy:'+name' ">
<span>{{name}}</span>
</li>
</ul>
在名称前加上 + 号表示升序,或者 - 表示降序。
参考:orderBy
编辑:正如另一个答案所暗示的,请不要使用 ng-init 来声明 variables/objects。正如您在 AngularJS 文档中看到的那样,可以使用一个简单的控制器,不仅用于大多数目的,更重要的是用于练习目的。
三件事:
您的过滤器没有 return 任何东西(缺少 return 语句)
ng-init 应该只用于别名,在其中声明变量不是一个好习惯。在您的示例中,您应该使用 ng-init 将过滤器应用于数组,但数组本身应该在控制器中声明。
您的排序算法不工作。要对这样的简单数组进行排序,您可以简单地使用 javascript sort() 方法。
这是一个工作中的 plunker,修正了三点:
http://plnkr.co/edit/Qv9TDonFmpJsnIjx3dff?p=preview
<ul ng-init="sorted_names = (names | sortAscending)">
<li ng-repeat="name in sorted_names ">
<span>{{name}}</span>
</li>
</ul>
编辑:我猜您想将此理解为一种练习形式,因此我的解决方案仅针对您尝试解决问题的方式。像其他提到的那样,您确实可以使用 orderby 过滤器最终使这更容易。
我正在学习 AngularJS
并作为尝试编写升序排序过滤器的练习:
这是我的 html 文件:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="../Scripts/angular.min.js"></script>
<script src="../Scripts/Controllers/app.js"></script>
</head>
<body ng-app="myApp">
<ul ng-init="names = ['Peter','Anton','John']">
<li ng-repeat="name in names | sortAscending ">
<span>{{name}}</span>
</li>
</ul>
</body>
</html>
这是我的过滤器:
app.filter("sortAscending", function () {
return function (input) {
var result = [];
for (var i = 0; i < input.length; i++) {
if (input[i] > input[i + 1]) {
result.push(input[i]);
}
}
return result;
}
});
我觉得关于比较值的循环有问题。
我做错了什么?
orderBy 怎么样:
<ul ng-init="names = [{name:'Peter'}, {name:'Anton'}, {name: 'John'}]">
<li ng-repeat="name in names | orderBy:'+name' ">
<span>{{name}}</span>
</li>
</ul>
在名称前加上 + 号表示升序,或者 - 表示降序。
参考:orderBy
编辑:正如另一个答案所暗示的,请不要使用 ng-init 来声明 variables/objects。正如您在 AngularJS 文档中看到的那样,可以使用一个简单的控制器,不仅用于大多数目的,更重要的是用于练习目的。
三件事:
您的过滤器没有 return 任何东西(缺少 return 语句)
ng-init 应该只用于别名,在其中声明变量不是一个好习惯。在您的示例中,您应该使用 ng-init 将过滤器应用于数组,但数组本身应该在控制器中声明。
您的排序算法不工作。要对这样的简单数组进行排序,您可以简单地使用 javascript sort() 方法。
这是一个工作中的 plunker,修正了三点:
http://plnkr.co/edit/Qv9TDonFmpJsnIjx3dff?p=preview
<ul ng-init="sorted_names = (names | sortAscending)">
<li ng-repeat="name in sorted_names ">
<span>{{name}}</span>
</li>
</ul>
编辑:我猜您想将此理解为一种练习形式,因此我的解决方案仅针对您尝试解决问题的方式。像其他提到的那样,您确实可以使用 orderby 过滤器最终使这更容易。