用于使用Startswith搜索的Angular js自定义过滤器随后包含ng-repeat

时间:2014-03-27 16:14:43

标签: javascript angularjs

我是棱角分明的新人 在我的应用程序中,我有一个text box和一个包含ng-repeat

的列表

当用户在文本框中键入任何东西时,我正在过滤 通过使用以下代码

基于键入的文本的结果
<input type=textbox ng-model="TypedText"/>

ng-repeat measure in newSearchResults |filter:TypedText

但是angular中的默认过滤器包含搜索。 我需要开头和下一个包含的结果。 我尝试编写自定义过滤器,但没有一个正在工作。帮助我创建自定义过滤器。

2 个答案:

答案 0 :(得分:1)

您可以创建自己的自定义过滤器,如documentation

所示
{{ filter_expression | filter : array : expression : comparator}}

您需要在此处提供expression功能。

所以,我们假设您要根据值&#34;是否包含&#34;进行过滤。搜索文本。您将在控制器中创建一个函数:

 $scope.customFilter = function(value) {
     // value parameter is the value passed in each ng-repeat
     // In your example, it is the measure variable in "ng-repeat measure in
     // newSearchResults

     if (value.indexOf($scope.TypedText) !== -1) {
         return true;
     } else {
         return false;
     }
 };

如果在自定义过滤器函数中返回true,则显示该值,否则不显示。

然后,您可以像使用任何其他过滤器一样使用自定义过滤器:

<div ng-repeat="measure in newSearchResults | filter:customFilter()">
    //Repeating tags here
</div>

答案 1 :(得分:0)

如第一个答案中提到的那样,您可以将一个函数传递给过滤器,过滤器会为您进行检查。

 $scope.customFilter = function(item) {

     var typedTextLength = ($scope.typedText) ? ($scope.typedText).length : 0,
         substring = (item.yourValueToCheck).substring(0, typedTextLength);

     return ($scope.typedText === substring);

 };