前面的例子(
http://angular-ui.github.io/bootstrap/#/typeahead)提到很容易实现一个后端到这个自动完成,但没有提供例子。我特别感兴趣的是找出当前输入的字符串,以便我可以发送到服务器,并发送回已经过滤的结果 – 我想做这个优化服务器端,并尽量减少我的查询,我不认为返回整个结果集并且仅排除用于显示的不匹配项目对于在数据库中具有超过200,000个条目的应用是可行的。
有一种方法来实现这非常容易,没有必要推出您的自定义解决方案(至少不是这种情况!)。基本上你可以使用任何函数作为字符串表达式的一部分,例如:
<input type="text" ng-model="selected" typeahead="state for state in getStates($viewValue)">
从此示例中可以看出,可以调用getStates($ viewValue)方法(在scope上定义),$ viewValue对应于用户输入的值。
这里最好的是,你的函数可以返回一个promise,这个promise将被正确识别的typeahead。
前一段时间我写了一个示例plunk,演示如何使用服务器端调用来提供自动完成。检查显示美国所有城市(基于geobytes.com)的自动完成功能,其中城市从JSONP服务进行实时查询:
http://plnkr.co/edit/t1neIS?p=preview
查看一个关于如何在服务器端进行过滤的工作示例(您需要键入至少3个字符以查看结果)。当然你不限于jsonp调用,你可以使用任何方法返回一个promise。