我特别感兴趣的是找出当前输入的字符串,以便我可以将其发送到服务器并返回已经过滤的结果-我想在服务器端进行这种优化,并最小化我的查询,我不认为对于数据库中有超过200,000个条目的应用程序来说,返回整个结果集并只排除不匹配的项目用于显示是可行的。
在这种情况下,我是否应该完全忘记typeahead,并实现一个带有下拉菜单的自定义解决方案,或者有没有一种方法可以轻松做到这一点?
发布于 2013-04-10 23:49:33
有一种方法可以非常容易地实现这一点,不需要推出您的自定义解决方案(至少在这种情况下不是!)。基本上,您可以使用任何函数作为typeaheads表达式的一部分,例如:
<input type="text" ng-model="selected" typeahead="state for state in getStates($viewValue)">
从本例中可以看到,可以调用getStates($viewValue)
方法(在作用域上定义),并且$viewValue
与用户输入的值相对应。
这里最好的是你的函数可以返回一个promise,并且这个promise将被typeahead正确识别。
不久前,我写了一个示例插件,展示了如何使用服务器端调用来提供自动完成功能。检查显示美国所有城市(基于geobytes.com)的自动补全功能,这些城市是通过JSONP服务实时查询的:
http://plnkr.co/edit/t1neIS?p=preview
有关如何在服务器端进行过滤的工作示例(您至少需要键入3个字符才能看到结果),请查看它。当然,您并不局限于jsonp调用,您可以使用任何返回promise的方法。
发布于 2017-02-14 03:49:24
我没有发表评论的代表,所以发布为答案(抱歉!)
如果您使用的是较新版本的bootstrap,则需要在typeahead前面添加uib- (如下所示)
<input type="text" ng-model="selected" uib-typeahead="state for state in getStates($viewValue)">
https://stackoverflow.com/questions/15930339
复制相似问题