Um目前正在开发旧的Angular js应用程序。
这具有一系列复选框,用户可以在其中选择一个或多个选项。对于每个选择,它都会进行后端api调用。但我想避免对每个选择进行后端调用,而是允许用户进行几秒钟的选择,然后立即进行一次后端调用。我尝试通过$ timeout函数来实现它,即使它等待用户进行选择之前要等待几秒钟,但是在我选择/取消选择选项的时间内它确实会调用后端API。
非常感谢有人可以建议我解决方案。
谢谢
答案 0 :(得分:0)
我认为您正在寻找的是去抖动功能。给定一个以毫秒为单位的延迟,调用防抖动功能将启动一个计时器并在计时器达到0后执行。如果我们在计时器达到0之前再次调用同一功能,则计时器将重新启动。
如果用户经常单击复选框,这将防止后端被API垃圾邮件淹没。
有关去抖的更多信息,请查看以下链接(在节流阀中也有说明):https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf
答案 1 :(得分:0)
仅跟踪您是否正在等待调用后端怎么样?如果您在等待,请勿再次调用您的函数。未经测试的代码示例:
var waiting = false
$scope.toggleCheck = function (option, optionArray, channel) {
var index = optionArray.indexOf(option);
optionArray[index].checked = !(optionArray[index].checked);
if (waiting == false) {
waiting = true //set to true so backend will not be called multiple times
$timeout(function () {
waiting = false
//call the backend api
//access the statuses by $scope.statuses
alert('backend call ' + $scope.statuses);
}, 2000);
}
}