尝试使用Angular JS执行搜索过滤器时出现Javascript错误

时间:2016-08-25 21:22:43

标签: javascript angularjs

在我的应用程序中,我尝试通过从头开始的部分匹配对名称执行搜索过滤器。下面是我试图做的一个例子:

假设我有一个名单:

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)

2 个答案:

答案 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()