我有一堆复选框。选中/取消选中这些框将激活$http.post()
到服务器。我希望它在用户完成点击后立即触发1个帖子,但我不确定如何设置$timeout
。
我在这里设置了一个plunker:https://plnkr.co/edit/QJRc9uMxJA17eFszyexO
目前的做法是,当用户选中复选框时,会在1秒后触发一个警报。 (我使用警报来模拟$http.post()
。
当用户点击新复选框时,我是否可以重置$timeout
?因此,如果我连续点击5个复选框,它将触发1个警报而不是5个?
答案 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