首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用AngularJS调用超快键控事件函数

用AngularJS调用超快键控事件函数
EN

Stack Overflow用户
提问于 2015-02-12 21:27:19
回答 1查看 1K关注 0票数 0

我在我的控制器中有这个功能,它触发我的控制器中的搜索功能来进行搜索。

代码语言:javascript
复制
$scope.fetchScannedData = function () {
    $timeout.cancel(fetchScannedDataTimer);
    fetchScannedDataTimer = $timeout(function () {
        $scope.search(); // do search with 5 second delay
    }, fetchScannedDataDelay);
};

以下是我的输入字段:

代码语言:javascript
复制
 <input type="text" class="form-control" ng-enter="search()" placeholder="Enter Search ID" ng-change="fetchScannedData()" ng-model="id">

(请注意我的表单字段上的ng-change指令,它会触发5秒的延迟)

我的问题是,我如何编辑这个delayScannedData函数,以便只有在非人工(条形码扫描)输入的文本超快时才触发延迟,而在人工输入文本时没有延迟?

EN

回答 1

Stack Overflow用户

发布于 2015-02-12 22:27:05

我建议把你的电话放在一个反弹跳中:

https://lodash.com/docs#debounce

或者更简单,如果你改变你的代码结构,你可以使用Angular 1.3 ngModelOptions:

https://docs.angularjs.org/api/ng/directive/ngModelOptions

我的意思是改变结构,而不是你所拥有的:

代码语言:javascript
复制
$scope.searchParams = {};

$scope.$watch('searchParams.query', function(newVal, oldVal){
   if(newVal !== oldVal){
      $scope.fetchScannedData();
   }
});

$scope.fetchScannedData = function () {
    $timeout.cancel(fetchScannedDataTimer);
    fetchScannedDataTimer = $timeout(function () {
        $scope.search(); // do search with 5 second delay
    }, fetchScannedDataDelay);
};

 <input type="text" class="form-control" ng-enter="search()" placeholder="Enter Search ID" ng-model="searchParams.query" ng-model-options="{ debounce: 1000 }">

不确定搜索()方法看起来是什么样子,但您需要确保将其更改为指向searchParams.query字符串。

我认为这种方法会比你目前采用的方法更“有角度”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28478656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档