我想在网站上做一些真正类似于"搜索"的东西http://www.jobs.cz/
它应该做什么:
- 选择框显示用户对输入的关注
- 用户可以在选择框中键入输入并过滤结果
- 如果用户选择其中一个结果选择框隐藏
- 如果用户再次输入焦点,选择框再次打开,用户可以选择另一个选项(选择为添加到上一个选项而不是重写上一个)
- 如果他开始输入,无论已经选择了什么,它仍然会过滤(例如:他已经选择了"Administrativa",但如果他键入Auto,它会为他提供"Auto-Moto",换句话说,之前选择的值不应该用于筛选)
- 每个拾取的值都应该处于某种"标记"模式(每个值都是独立的内联块并具有类)
在我继续之前,我不希望你为我制作整个代码,这将花费太长时间,我来这里不是为了代码,而是为了如何设计这样的东西。我一开始就有很多事情,只是不知道自己的想法是否正确,我需要帮助思考如何制作这样的东西。
所以我做了什么:
- 打开/关闭选择框div:
输入看起来像:
<input id="position" placeholder="Position" ng-focus="focus=true" ng-blur="focus=false" ng-model="q">
然后像
<div class="inputHelper" ng-show="focus">
- 筛选结果:
基于角度文档过滤,ng重复应该通过非常容易地完成
<li ng-repeat="pos in listCtrl.positions | filter:q as results" ng-click="listCtrl.choosePosition(pos)">{{pos.name}}</li>
然而,对于<input>
上的ng-model="q"
,如果我向该模型推送一些东西,问题就会开始,就像之前从用户那里挑选的一样。如果用户已经选择了一些东西,我不知道如何处理过滤器。
- 处理多个拾取
为此,我创建了一个数组,在那里我总是检查用户是否已经选择了它,如果没有将它推送到数组中。
choosePosition: function(position) {
if (listCtrl.chosenPosition.indexOf(position) === -1) {
listCtrl.chosenPosition.push(position);
}
}
- 显示输入中的对象数组
我在文档中搜索了很多,并在谷歌上搜索了一个此类问题,我在输入中找到了基本的显示数组。我没有发现比这更有用的东西。所以在这一点上,我不知道如何显示对象数组,以及如何将每个数组元素设置为内联块并给它一些类。
摘要:
这是一篇很长的帖子,但我尽量说我需要做的一切,以避免错过理解,我在这里呆了几天,但我仍然被困在某个地方。我甚至不确定我是否设计得很好。如果这里有人可以帮助我完成部分可以工作的代码,或者至少试着解释我如何做这样的事情,我会非常感激
如果您的项目允许使用它,Angular Material的自动完成几乎是您所需的直接实现。