在 angularjs 中动态设置过滤器

Dynamically set a filter in angularjs

我想根据下拉列表中选择的条件过滤 table。在 newList 函数中写入 val 不会过滤 table。任何建议如何解决这个问题。

根据您的代码,您尝试多次添加条件,然后您想使用这些条件进行过滤。

这里你的 JSON 只有 3 个 属性。 {姓名,phone,和年龄}。

所以你的标准不应该超过 3 行并且它不应该有相同的东西两次。 如果这样做,则需要构建自己的过滤器。 使用以下代码

$scope.newList = function() {
  var searchBy = {};
  angular.forEach($scope.newCriteria, function(criteria, key) {
    searchBy[criteria.name] = criteria.value;
  });
  $scope.newfriends = $filter('filter')($scope.friends, searchBy);
}

和HTMl如下

<div id="searchy">

<ul class="list-unstyled">
  <li style="display: inline-block" ng-repeat="crtia in newCriteria">
    <table>
      <tr>

        <td>
          <select ng-model="crtia.name" ng-options="searchopt for searchopt in searchcriteria " ng-click="searchy.check()"></select>
        </td>
        <td>
          <input ng-model="crtia.value" placeholder="{{crtia.name}}" ng-change="newList()" />
        </td>

      </tr>
    </table>
  </li>
</ul>  <button ng-click="searchy.generate()">Add Criteria</button> </div>

这是更新的插件。 http://plnkr.co/edit/r5OcI366dyvLQ24fFIje?p=preview.

可能您想根据下拉选择进行过滤,然后创建合适的搜索模型,例如

<select ng-model="selectedsearchcriteria"
        ng-options="searchopt for searchopt in searchcriteria "></select>

<!--When you select dropdown 'selectedsearchcriteria' update like 'name', 'age' and so on
then ng-model="search[selectedsearchcriteria]" forms like search.name, search.age and so on-->
<input name="search" ng-model="search[selectedsearchcriteria]" placeholder="{{selectedsearchcriteria}}" />

<!--Here 'filter:search:strict' filter like search.name it is like property based filter-->

<tr ng-repeat="friendObj in newfriends |filter:search:strict">

另外我认为你不需要在你的控制器中使用$filter('filter')

勾选update plunker