gpt4 book ai didi

javascript - 过滤搜索结果

转载 作者:行者123 更新时间:2023-11-28 04:04:45 25 4
gpt4 key购买 nike

我有一个从搜索栏中搜索元素的代码,但它位于带有搜索的选择下拉列表中:

[Select Filter ]

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

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

最佳答案

您最初可以在 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>

然后与现有的 Controller 代码一起添加这两个函数:

$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

关于javascript - 过滤搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46795820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com