在我的应用程序中,我尝试通过从头开始的部分匹配对名称执行搜索过滤器。下面是我试图做的一个例子:
假设我有一个名单:
Ben
James
Adam
Judy
Andy
并在我的搜索字段中输入文字"a"
,它将返回
Adam
Andy
如果我在我的搜索字段中进一步输入"an"
,它将返回
Andy
在我的app.js中,我有代码:
var myApp = angular.module("myApp", []);
myApp.controller("myController", function ($scope) {
var employees = [
{ name: "Ben", gender: "Male", salary: 55000, city: "London" },
{ name: "Jane", gender: "Female", salary: 62000, city: "Albany" },
{ name: "Rick", gender: "Male", salary: 65000, city: "Los Angeles" },
{ name: "Pam", gender: "Female", salary: 60000, city: "Paris" },
{ name: "Josh", gender: "Male", salary: 68000, city: "Brussels" },
];
$scope.employees = employees;
$scope.filtered = function (item) {
if ($scope.searchName == undefined) {
return true;
} else {
if (item.name.toLowerCase().startsWith($scope.searchName.toLowerCase()) != -1) {
return true;
}
}
return false;
}
});
在我的html页面中,我有以下显示员工列表的行:
<tr ng-repeat="employee in employees | filter: filtered">
用户输入搜索文本的以下行:
<input type="text" placeholder="Search Name" ng-model="searchName.name"> <br><br>
但是,当我尝试测试时,我收到错误:
Error: $scope.searchName.toLowerCase is not a function. (In '$scope.searchName.toLowerCase()', '$scope.searchName.toLowerCase' is undefined)
答案 0 :(得分:1)
由于您的ng-model
设置为searchName.name
,$scope.searchName
是一个对象,因此它没有.toLowerCase()
功能。
你需要像这样调整你的案例:
if (item.name.toLowerCase().startsWith($scope.searchName.name.toLowerCase()) !== -1) {}
此外,建议使用标识运算符而不是相等运算符,除非明确不需要严格标识。
答案 1 :(得分:1)
ng-model
设置为searchName.name,因此您可能需要拨打$scope.searchName.name.toLowerCase()
而不是$scope.searchName.toLowerCase()