为什么我的排序过滤器对除字母 "m?" 以外的所有内容都有效
Why would my sort filter work for everything but the letter "m?"
我在 AngularJS 中创建了一个小过滤器应用程序,它的工作原理是,当我输入一个字母时,它会在 table 中找到包含该字母的所有内容。例如,如果我键入一个 "s",那么我会得到其中包含 "s" 的所有名称。为什么有些字母,比如字母 "m" 根本不起作用?有人可以告诉我如何更改此设置以便所有字母都有效吗?非常感谢。
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>The Sort Filter</title>
<link href="content/css/styles.css" rel="stylesheet" type="text/css" />
<script src="app\lib\angular.min.js"></script>
<script src="app\app.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="myController">
<input type="text" ng-model="search" />
<table>
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Gender</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="employee in employees | orderBy: 'lastName' | filter: search"{{employee.lastName}}">
<td>{{ employee.firstName}}</td>
<td>{{ employee.lastName}}</td>
<td>{{ employee.gender}}</td>
<td>{{ employee.salary}}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
JS
angular.module("myApp", [])
.controller("myController", function ($scope) {
//array of objects
{var employees = [
{firstName: "David", lastName: "Hastings", gender: "Male", salary: 55000},
{firstName: "Sarah", lastName: "Smith", gender: "Female", salary: 56000},
{firstName: "Mark", lastName: "Schydinger", gender: "Male", salary: 45000},
{firstName: "Pam", lastName: "Yerace", gender: "Female", salary: 70000},
{firstName: "Todd", lastName: "Barber", gender: "Male", salary: 50000},
{firstName: "Maria", lastName: "Randall", gender: "Female", salary: 59000},
{firstName: "Amanda", lastName: "Quinn", gender: "Female", salary: 68000},
{firstName: "James", lastName: "Stewart", gender: "Male", salary: 62000},
{firstName: "Rachel", lastName: "Dowd", gender: "Female", salary: 57000},
{firstName: "Keith", lastName: "Cameron", gender: "Male", salary: 56500},
{firstName: "Carol", lastName: "Marshall", gender: "Female", salary: 62000},
{firstName: "Peter", lastName: "Buckland", gender: "Male", salary: 60000},
{firstName: "Diana", lastName: "Murray", gender: "Female", salary: 73000},
{firstName: "Dylan", lastName: "Hamilton", gender: "Male", salary: 61000},
{firstName: "Caroline", lastName: "Clark", gender: "Female", salary: 62000},
{firstName: "Cletus", lastName: "Bones", gender: "Male", salary: 60000},
{firstName: "Judy", lastName: "Charleton", gender: "Female", salary: 64000}
]};
$scope.employees = employees;
});
它确实有效。 "m" returns 所有数据因为 "Male" 和 "Female"。如果您只想按名字和姓氏进行过滤,则必须创建自己的自定义过滤器。例如:
https://jsfiddle.net/fa0coq4e/
在视图中:
<tr ng-repeat="employee in employees | orderBy: 'lastName' | myFilter: search">
和过滤器:
filter('myFilter', function() {
return function(array, search) {
if (search !== undefined && search.length > 0) {
var new_array = [];
for (var i = 0; i < array.length; i++) {
if (array[i].firstName.toLowerCase().indexOf(search.toLowerCase()) > -1
|| array[i].lastName.toLowerCase().indexOf(search.toLowerCase()) > -1)
new_array.push(array[i]);
}
return new_array;
} else {
return array;
}
}});
我在 AngularJS 中创建了一个小过滤器应用程序,它的工作原理是,当我输入一个字母时,它会在 table 中找到包含该字母的所有内容。例如,如果我键入一个 "s",那么我会得到其中包含 "s" 的所有名称。为什么有些字母,比如字母 "m" 根本不起作用?有人可以告诉我如何更改此设置以便所有字母都有效吗?非常感谢。
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>The Sort Filter</title>
<link href="content/css/styles.css" rel="stylesheet" type="text/css" />
<script src="app\lib\angular.min.js"></script>
<script src="app\app.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="myController">
<input type="text" ng-model="search" />
<table>
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Gender</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="employee in employees | orderBy: 'lastName' | filter: search"{{employee.lastName}}">
<td>{{ employee.firstName}}</td>
<td>{{ employee.lastName}}</td>
<td>{{ employee.gender}}</td>
<td>{{ employee.salary}}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
JS
angular.module("myApp", [])
.controller("myController", function ($scope) {
//array of objects
{var employees = [
{firstName: "David", lastName: "Hastings", gender: "Male", salary: 55000},
{firstName: "Sarah", lastName: "Smith", gender: "Female", salary: 56000},
{firstName: "Mark", lastName: "Schydinger", gender: "Male", salary: 45000},
{firstName: "Pam", lastName: "Yerace", gender: "Female", salary: 70000},
{firstName: "Todd", lastName: "Barber", gender: "Male", salary: 50000},
{firstName: "Maria", lastName: "Randall", gender: "Female", salary: 59000},
{firstName: "Amanda", lastName: "Quinn", gender: "Female", salary: 68000},
{firstName: "James", lastName: "Stewart", gender: "Male", salary: 62000},
{firstName: "Rachel", lastName: "Dowd", gender: "Female", salary: 57000},
{firstName: "Keith", lastName: "Cameron", gender: "Male", salary: 56500},
{firstName: "Carol", lastName: "Marshall", gender: "Female", salary: 62000},
{firstName: "Peter", lastName: "Buckland", gender: "Male", salary: 60000},
{firstName: "Diana", lastName: "Murray", gender: "Female", salary: 73000},
{firstName: "Dylan", lastName: "Hamilton", gender: "Male", salary: 61000},
{firstName: "Caroline", lastName: "Clark", gender: "Female", salary: 62000},
{firstName: "Cletus", lastName: "Bones", gender: "Male", salary: 60000},
{firstName: "Judy", lastName: "Charleton", gender: "Female", salary: 64000}
]};
$scope.employees = employees;
});
它确实有效。 "m" returns 所有数据因为 "Male" 和 "Female"。如果您只想按名字和姓氏进行过滤,则必须创建自己的自定义过滤器。例如:
https://jsfiddle.net/fa0coq4e/
在视图中:
<tr ng-repeat="employee in employees | orderBy: 'lastName' | myFilter: search">
和过滤器:
filter('myFilter', function() {
return function(array, search) {
if (search !== undefined && search.length > 0) {
var new_array = [];
for (var i = 0; i < array.length; i++) {
if (array[i].firstName.toLowerCase().indexOf(search.toLowerCase()) > -1
|| array[i].lastName.toLowerCase().indexOf(search.toLowerCase()) > -1)
new_array.push(array[i]);
}
return new_array;
} else {
return array;
}
}});