基于下拉列表的搜索条件 - AngularJS过滤器

时间:2018-01-02 14:51:08

标签: javascript angularjs

我有一个关于$(info starting shell: $(SCRIPT)) OUT := $(shell $(SCRIPT)) 来搜索示例名称的问题。这很容易在ng-repeat上实现。

我遇到的问题实际上是我要基于filtername(两个不同的实体)进行过滤。

我所尝试的是在account_namename上对输入框进行过滤,但没有成功。我做的是这个:

account_name

所以我有:
1)输入字段(搜索框)
2)<input type="text" placeholder="Search" ng-model="searchName.name"> <md-card flex="45" flex-sm="100" flex-md="100" flex-xs="100" ng-show="(account|filter:searchName).length > 0" ng-repeat="account in containers | groupBy: 'accountId' track by $index | filterBy: ['name', 'account_name']: searchName.name| filterBy: ['name', 'account_name']: searchName.account_name"> <md-toolbar> <div class="md-toolbar-tools" ng-repeat="container in account | limitTo: 1"> <h1 class="md-display-3"> <a href="{{container.tagManagerUrl}}">{{container.account_name}}</a></h1> </div> </md-toolbar> (.... some code that is not important) //table start <tr ng-repeat="container in account | filterBy: ['name', 'account_name']: searchName.name| filterBy: ['name', 'account_name']: searchName.account_name"> 上使用的<md-card> 3)ng-repeat与md-card相关但我必须在这里运行ng-repeat 4)带有ng-repeat的表,显示条目。

这是我尝试过的路线:

<md-toolbar>

但是我无法在输入字段filterBy: ['name', 'account_name']: searchName.name| filterBy: ['name', 'account_name']: searchName.account_name 中声明这会引发错误

解决方案我希望尝试是有一个下拉菜单,我可以选择按ng-model="searchName.name && searchName.account_name"name进行过滤 看起来像这样:

enter image description here

如果可以通过输入字段中的account_name和name进行搜索,那么即使不是这样也会很好。希望你能帮助我前进并指导我所需要的以及我是如何做到的(不需要你做所有工作)。

由于

1 个答案:

答案 0 :(得分:1)

可以通过account_name和name进行搜索,您可以将对象传递给过滤器。

<input type="text" placeholder="Search" ng-model="search.name">
<input type="text" placeholder="Search" ng-model="search.account_name">
<tr ng-repeat="container in account | filter:{name: search.name, account_name: search.account_name}>
</tr>

您也可以使用自定义过滤器

JS

  $scope.customFilter = function(row){   
    if($scope.Search == undefined || $scope.Search == "")
      return true;
    else if(row.name.indexOf($scope.Search) !== -1 || row. account_name.indexOf($scope.Search) !== -1)
      return true;
    else 
      return false;
  }

HTML

<tr ng-repeat="container in account | filter:customFilter>
</tr>

Demo