Javascript 改变触发得太晚了

Javascript 改变触发得太晚了,javascript,angularjs,ionic-framework,ionic,Javascript,Angularjs,Ionic Framework,Ionic,我正在搜索我的应用程序,我有列出项目的搜索输入 在这里,您可以看到在控制器中触发runSearch()函数的输入 <div class="item item-input"> <input type="search" placeholder="" ng-model="query" ng-change="runSearch()"> </div> 问题是,显示的结果忽略了输入中的最后一个字符。看起来ng ch

我正在搜索我的应用程序,我有列出项目的搜索输入

在这里,您可以看到在控制器中触发runSearch()函数的输入

        <div class="item item-input">
            <input type="search" placeholder="" ng-model="query" ng-change="runSearch()">
        </div>
问题是,显示的结果忽略了输入中的最后一个字符。看起来ng change触发稍微晚了一点,或者$scope.query延迟了一个字符

解释:

搜索输入为:ABCD

结果应该是:ABCDsomething

但实际结果是ABC


搜索输入中的最后一个字符(D)被忽略。

我通过将结果添加到
itemsToShow
,然后每隔1秒刷新
$scope.results
解决了这个问题

$interval(function () {
    $scope.results = itemsToShow;
}, 1000);

如何“将建筑物添加到结果中”?如果对“ABC”的查询比对“ABC”的查询返回所需时间更长,则最终将得到对ABC的查询结果。你真的应该有一个很短的延迟后发生的变化,这表明用户已经停止键入,然后才做搜索添加建筑物需要一些时间,这是线性循环。我该把延误放在哪里?当我将ng model options=“{debounce:3000}”放入html时,它确实会等待,但结果是相同的。您是否尝试过在执行搜索之前等待用户点击返回或GO按钮,并且它是这样工作的?除非你是在提前打字,否则你似乎应该等待用户完成他们正在搜索的内容。如果您正在寻找typeahead行为,请尝试使用bootstrapui提供的typeahead或其他angular LIB,因为它们工作得很好。更好的解决方案是使用
debounce
updateOn
via
ngModelOptions
@lux,我已经尝试过debounce,但实际上没有改变任何东西(只是稍微慢了一点)
$interval(function () {
    $scope.results = itemsToShow;
}, 1000);