angular ng-repeat filter

 <input type="text" ng-model="search">
  <div class="selectContain">
    <ul class="searchSelect" ng-show="showList">
      <li ng-repeat="item in items | filter:{name:search}" >{{item[name]}}</li>
    </ul>
  </div>
  
 想去对items进行筛选,但是不确定筛选 items中的哪个属性。也就是说,可以把name写成变量的形式吗。
 即filter:{name:search}"  中的name为变量怎么去写。
阅读 3.2k
3 个回答

写了个demo

http://embed.plnkr.co/eRxymEa...

列表过滤

核心代码:

      <ul class="searchSelect">
        <li ng-repeat="item in items | filter: myFilter">{{ item.name }}</li>
      </ul>
      
      
      angular.module('myapp').controller('myController', function($scope) {
          $scope.search = "";
          $scope.filterName = "name";    // 传入要过滤的属性名
          $scope.items = [{
            name: 'wws',
            age: 1
          }, {
            name: 'A',
            age: 2
          }, {
            name: 'B',
            age: 3
          }];
          $scope.myFilter = function(item) {
            return item[$scope.filterName] == $scope.search;
          }
       })

如果想搜索条件为空显示全部,只要把过滤函数改成:

  $scope.myFilter = function(item) {
      return !$scope.search || item[$scope.filterName] == $scope.search;
  }

你的这种写法是根据name属性来过来items。如果你把name去掉,这样写 filter:search,那就默认根据所有属性过滤了,不用去指定具体属性。

楼主解决问题了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题