2016-08-25 25 views
0

在我的應用程序中,我試圖通過部分匹配從頭開始對名稱執行搜索過濾器。下面有什麼我試着做一個例子:嘗試使用Angular JS執行搜索過濾器的Javascript錯誤

可以說我有名字的列表:

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) 

回答

1

由於您的ng-model設置爲searchName.name,因此$scope.searchName是一個對象,因此它沒有.toLowerCase()函數。

您需要調整您如果情況是這樣的:

if (item.name.toLowerCase().startsWith($scope.searchName.name.toLowerCase()) !== -1) {} 

而且,最好是使用運營商的身份,而不是平等的經營者,除非明確不需要嚴格的身份。

+0

謝謝。我把ng-model設置爲「searchName.name」,因爲在這種情況下,默認過濾器只會搜索「name」列,並且我認爲我的自定義過濾器需要它。 – skipper

1

ng-model設置爲searchName.name,所以你可能需要而不是在$scope.searchName.name.toLowerCase()調用$scope.searchName.toLowerCase()