用户停止点击时的角度计时器

时间:2016-03-29 17:44:44

标签: angularjs

我有一堆复选框。选中/取消选中这些框将激活$http.post()到服务器。我希望它在用户完成点击后立即触发1个帖子,但我不确定如何设置$timeout

我在这里设置了一个plunker:https://plnkr.co/edit/QJRc9uMxJA17eFszyexO

目前的做法是,当用户选中复选框时,会在1秒后触发一个警报。 (我使用警报来模拟$http.post()

当用户点击新复选框时,我是否可以重置$timeout?因此,如果我连续点击5个复选框,它将触发1个警报而不是5个?

2 个答案:

答案 0 :(得分:1)

$timeout()会返回一个承诺(您可以在其上调用.then(),但这是另一个故事)。还有$timeout.cancel(promise)取消挂起超时。因此,请将代码修改为:

app.controller('IndexController', function($scope, $timeout) {

  var prevTimeout;

  $scope.onClick = function() {
    if( prevTimeout ) {
      $timeout.cancel(prevTimeout);
    }
    prevTimeout = $timeout(function() {
      prevTimeout = null;
      alert('some http post called.');
    }, 1000);
  };

  $scope.model = new Array(5);
});

答案 1 :(得分:0)

我认为你需要的是去抖功能。如果您使用lodasd检查https://lodash.com/docs#debounce