去抖动不在 $scope.$watch 内触发

debounce not firing inside $scope.$watch

当我的 UI 中的模型变量更新时,我正在尝试 运行 一个函数,但我也试图通过去抖来限制该函数作为请求的函数执行的频率触发 AJAX 调用。然而,下面的去抖功能似乎根本没有触发。

我最初编写了自己的去抖动服务,并使用下划线去抖动方法来测试我写的内容是否不正确,但结果 Angular 只是不喜欢下面的内容...

在 HTML 中使用 Angular 的 ng-model-option 去抖动方法不是一个选项。

$scope.$watch('filters.monthlyCost', function () {

    _.debounce(function () {
        console.log('lol');
    }, 1000);

});

没有控制台错误,console.log('lol')从来没有发生过。

注意:$watch 执行

据我了解 _.debounce 的文档(未测试)

$scope.$watch('filters.monthlyCost', function () {

    var logConsole = _.debounce(function () {
        console.log('lol');
        }, 1000);
    logConsole();

});

使用你的代码,你只是注册了一个去抖功能,但它不会执行。

由于debouncereturn是一个函数((Function): Returns the new debounced function.),需要执行debounce的return值,

例如:

_.debounce(function () {
        console.log('lol');
    }, 1000)();

你可以这样做:

$scope.$watch('monthlyCost', _.debounce(function() {
        console.log('lol');
    }, 1000));