AngularJS 过滤器

可以在 AngularJS 中添加过滤器来格式化数据。


AngularJS 过滤器

AngularJS 提供用于转换数据的筛选器:

  • currency 将数字格式化为货币格式。
  • date 将日期格式化为指定格式。
  • filter 从数组中选择项目的子集。
  • json 将对象格式化为JSON字符串。
  • limitTo 将数组/字符串限制为指定数量的元素/字符。
  • lowercase 将字符串格式化为小写。
  • number 将数字格式化为字符串。
  • orderBy 通过表达式对数组进行排序。
  • uppercase 将字符串格式化为大写。

表达式增加过滤器

可以使用管道字符 |,后跟过滤器,将过滤器添加到表达式中。

大写过滤器将字符串格式化为大写:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="personCtrl">
  6. <p>名称是 {{ lastName | uppercase }}</p>
  7. </div>
  8. <script>
  9. angular.module('myApp', []).controller('personCtrl', function($scope) {
  10. $scope.firstName = "John",
  11. $scope.lastName = "Doe"
  12. });
  13. </script>
  14. </body>
  15. </html>

lowercase 过滤器将字符串格式化为小写:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="personCtrl">
  6. <p>名称是 {{ lastName | lowercase }}</p>
  7. </div>
  8. <script>
  9. angular.module('myApp', []).controller('personCtrl', function($scope) {
  10. $scope.firstName = "John",
  11. $scope.lastName = "Doe"
  12. });
  13. </script>
  14. </body>
  15. </html>

指令添加过滤器

通过使用管道字符 |,后跟过滤器,将过滤器添加到指令中,如 ng-repeat:

实例

orderBy 过滤器对数组进行排序:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="namesCtrl">
  6. <p>循环对象:</p>
  7. <ul>
  8. <li ng-repeat="x in names | orderBy:'country'">
  9. {{ x.name + ', ' + x.country }}
  10. </li>
  11. </ul>
  12. </div>
  13. <script>
  14. angular.module('myApp', []).controller('namesCtrl', function($scope) {
  15. $scope.names = [
  16. {name:'Jani',country:'Norway'},
  17. {name:'Carl',country:'Sweden'},
  18. {name:'Margareth',country:'England'},
  19. {name:'Hege',country:'Norway'},
  20. {name:'Joe',country:'Denmark'},
  21. {name:'Gustav',country:'Sweden'},
  22. {name:'Birgit',country:'Denmark'},
  23. {name:'Mary',country:'England'},
  24. {name:'Kai',country:'Norway'}
  25. ];
  26. });
  27. </script>
  28. </body>
  29. </html>

货币过滤器

currency 过滤器将数字格式化为货币

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="costCtrl">
  6. <h2>价格: {{ price | currency }}</h2>
  7. </div>
  8. <script>
  9. var app = angular.module('myApp', []);
  10. app.controller('costCtrl', function($scope) {
  11. $scope.price = 58;
  12. });
  13. </script>
  14. <p>货币过滤器将数字格式化为货币格式。</p>
  15. </body>
  16. </html>

filter 过滤器

filter 过滤器选择数组的子集。

filter 过滤器只能用于数组,它返回一个只包含匹配项的数组。

实例

返回包含字母 "i" 的名称:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="namesCtrl">
  6. <ul>
  7. <li ng-repeat="x in names | filter : 'i'">
  8. {{ x }}
  9. </li>
  10. </ul>
  11. </div>
  12. <script>
  13. angular.module('myApp', []).controller('namesCtrl', function($scope) {
  14. $scope.names = [
  15. 'Jani',
  16. 'Carl',
  17. 'Margareth',
  18. 'Hege',
  19. 'Joe',
  20. 'Gustav',
  21. 'Birgit',
  22. 'Mary',
  23. 'Kai'
  24. ];
  25. });
  26. </script>
  27. <p>本例仅显示包含字母 "i" 的名称。</p>
  28. </body>
  29. </html>

根据用户输入过滤数组

通过在输入字段上设置 ng-model 指令,我们可以将输入字段的值用作过滤器中的表达式。

在输入字段中键入一个字母,列表将根据匹配情况收缩/增长:通过在表头上添加 ng-click 指令,我们可以运行一个函数来更改数组的排序顺序:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="myApp" ng-controller="namesCtrl">
  6. <p>在输入框中输入一个字母:</p>
  7. <p><input type="text" ng-model="test"></p>
  8. <ul>
  9. <li ng-repeat="x in names | filter:test">
  10. {{ x }}
  11. </li>
  12. </ul>
  13. </div>
  14. <script>
  15. angular.module('myApp', []).controller('namesCtrl', function($scope) {
  16. $scope.names = [
  17. 'Jani',
  18. 'Carl',
  19. 'Margareth',
  20. 'Hege',
  21. 'Joe',
  22. 'Gustav',
  23. 'Birgit',
  24. 'Mary',
  25. 'Kai'
  26. ];
  27. });
  28. </script>
  29. <p>该列表将只包含与过滤器匹配的名称。</p>
  30. </body>
  31. </html>

自定义过滤器

您可以通过在模块中注册新的过滤器工厂功能来制作自己的过滤器:

实例

做一个名叫 "myFormat" 的自定义过滤器:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <p>单击表格标题以更改排序顺序:</p>
  6. <div ng-app="myApp" ng-controller="namesCtrl">
  7. <table border="1" width="100%">
  8. <tr>
  9. <th ng-click="orderByMe('name')">名称</th>
  10. <th ng-click="orderByMe('country')">国家</th>
  11. </tr>
  12. <tr ng-repeat="x in names | orderBy:myOrderBy">
  13. <td>{{x.name}}</td>
  14. <td>{{x.country}}</td>
  15. </tr>
  16. </table>
  17. </div>
  18. <script>
  19. angular.module('myApp', []).controller('namesCtrl', function($scope) {
  20. $scope.names = [
  21. {name:'Jani',country:'Norway'},
  22. {name:'Carl',country:'Sweden'},
  23. {name:'Margareth',country:'England'},
  24. {name:'Hege',country:'Norway'},
  25. {name:'Joe',country:'Denmark'},
  26. {name:'Gustav',country:'Sweden'},
  27. {name:'Birgit',country:'Denmark'},
  28. {name:'Mary',country:'England'},
  29. {name:'Kai',country:'Norway'}
  30. ];
  31. $scope.orderByMe = function(x) {
  32. $scope.myOrderBy = x;
  33. }
  34. });
  35. </script>
  36. </body>
  37. </html>

myFormat 过滤器将其他字符格式化为大写。

分类导航