【问题标题】:Filter search Results过滤搜索结果
【发布时间】:2017-10-17 17:25:51
【问题描述】:

我有一个从搜索栏中搜索项目的代码,但它在搜索的选择下拉列表中:

[]

但是我最近决定我不想要选择并且只想要查询过滤器,我将如何分隔代码?从选择到独立搜索。这是我使用的代码:

Javascript:

// AngularJS

var phonecatApp = angular.module('app', []);

phonecatApp.controller('ListCtrl', function ($scope) {
    $scope.items = [{
        'name': 'Item 1'
    }, {
        'name': 'Item 2'
    }, {
        'name': 'Account 3'
    }, {
        'name': 'Account 4'
    }, {
        'name': 'Item 5'
    }, {
        'name': 'Item 6'
    }, {
        'name': 'User 7'
    }, {
        'name': 'User 8'
    }, {
        'name': 'Item 9'
    }, {
        'name': 'Item 10'
    }, {
        'name': 'Item 11'
    }, {
        'name': 'Item 12'
    }, {
        'name': 'Item 13'
    }, {
        'name': 'Item 14'
    }, {
        'name': 'User 15'
    }, {
        'name': 'User 16'
    }, {
        'name': 'Person 17'
    }, {
        'name': 'Person 18'
    }, {
        'name': 'Person 19'
    }, {
        'name': 'Item 20'
    }, ];
});

// jQuery
$('.dropdown-menu').find('input').click(function (e) {
    e.stopPropagation();
});

HTML:

 <div class="dropdown dropdown-scroll" ng-app="app">
    <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">Select <span class="caret">    </span>
    </button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" ng-controller="ListCtrl">
        <li role="presentation">
            <div class="input-group input-group-sm search-control"> <span   class="input-group-addon">
                    <span class="glyphicon glyphicon-search"></span>
</span>
                <input type="text" class="form-control" placeholder="Query" ng-model="query"></input>
            </div>
        </li>
        <li role="presentation" ng-repeat='item in items | filter:query'>     <a href="#"> {{item.name}} </a>
        </li>
    </ul>
</div>

CSS:

.dropdown.dropdown-scroll .dropdown-menu {
    max-height: 200px;
    width: 60px;
    overflow: auto;
}
.search-control {
    padding: 5px 10px;
}

JSFiddle

【问题讨论】:

  • 您愿意使用添加库吗?因为你需要的是 Typehead,而 Angular UI Bootstrap 有完美的指令。 angular-ui.github.io/bootstrap/#!#typeahead
  • 只有当一切都失败时我才是
  • @Shantanu 如果你想回答,请接受并投票

标签: javascript jquery html css angularjs


【解决方案1】:

您最初可以在 vie 上输入字段,然后在查询编辑时向用户显示过滤后的选项,当用户选择该选项时,您可以隐藏所有选项。因此,它会像 Typehead 一样出现和工作。因此,您可以将模板更改为:

<div class="body-container" ng-app="app">
  <div ng-controller="ListCtrl">
    <div class="input-group input-group-sm search-control"> 
      <span class="input-group-addon">
      <span class="glyphicon glyphicon-search"></span>
      </span>
      <input type="text" class="form-control" placeholder="Query" 
        ng-model="query" ng-change="queryUpdated()" />
    </div>
    <div class="items" ng-hide="isSelected">
      <p class="search-items" ng-click="selectItem(item.name)" 
       ng-repeat='item in items | filter:query track by $index'> {{item.name}}
      </p>
    </div>
  </div>
</div>

然后与您现有的控制器代码一起添加这两个功能:

$scope.selectItem = function(selected) {
    $scope.query = selected;
    $timeout(function() {
      $scope.isSelected = true;
    });
}
$scope.queryUpdated = function() {
    $scope.isSelected = false;
}

因此,这样您就可以拥有类似 Typehead 的功能,并且您还可以根据要求更改其行为,例如在首次加载时显示列表或当用户完全不知道选项时。

Working jsfiddle

现在您可以使用 Angular UI Bootstrap 插件库实现相同的功能。这样你的代码就会看起来

<input type="text" ng-model="selected" 
uib-typeahead="item.name for item in items | filter:$viewValue | limitTo:8" 
class="form-control">

这里来自库的 uib-typehead 指令将处理为下拉选项添加模板并使用 ngAnimate 处理其动画。

Working plunker Example

【讨论】:

  • 谢谢!我已经尝试了好几天了!
猜你喜欢
  • 2013-02-02
  • 2012-07-05
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2020-04-07
相关资源
最近更新 更多