使用Promise时的Angular UI Typeahead Limit结果

时间:2016-09-06 14:27:59

标签: javascript angularjs angular-ui-bootstrap

我将一个Plunker作为例子http://plnkr.co/edit/ylR1mel46FXTXzdvfHpa?p=preview

分叉

在标记中使用内联的promises时如下:

<div class='container-fluid' ng-controller="TypeaheadCtrl">
    <pre>Model: {{selected| json}}</pre>
    <input type="text" ng-model="selected" typeahead="state for state in getStates($viewValue) | limitTo: 5">
</div>

如果你输入&#34; A&#34;在控制器中,您可以看到limitTo选项被忽略。这有可能以这种方式使用吗?

1 个答案:

答案 0 :(得分:2)

您需要在承诺的回调中限制结果。 的 https://github.com/angular-ui/bootstrap/issues/1740

  

AngularJS过滤器正在同步执行,如果你在getLocation($ viewValue)中编写你的表达式,就像地址一样filter:$ viewValue这部分getLocation($ viewValue)意味着过滤器会过滤一个promise对象(因为过滤器过滤器只能在数组上运行,所以它是noop)。这里正确的方法是在服务器端进行过滤(这是从服务器获得异步结果的重点)。如果您仍想在客户端进行进一步过滤,可以在JavaScript中的promise回调函数中进行。