输入输入时如何限制对我的后端的 md-autocomplete 调用?

How to throttle md-autocomplete calls to my back-end when typing into an input?

我在我的一个网络表单上使用 angular md-autocomplete 输入。我已经完成所有设置并且运行良好。

不出所料,每当我在自动完成输入中键入新字符时,都会调用我的后端以获取自动完成数据。问题是我不想每次输入新字符时都进行后端调用。我只希望在自上次进行后端调用以来已经 x 秒后触发后端调用。

这是输入字符时调用的函数:

function autocomplete(inputValue) {
    var deferred = $q.defer();

    portalState.apiPost(
        'api/cats/search',
        { 
            SearchType: 'all',
            SearchTerm: inputValue
        },
        function(response) {
            deferred.resolve(response.data);
        },
        function(response) {
            deferred.resolve(null);
        });

    return deferred.promise;
}

这是我尝试加入任何节流逻辑之前的工作函数。我在设置节流逻辑时遇到的主要问题是我不知道 return 什么不会导致 angular 抛出错误,例如:

function autocomplete(inputValue) {
    var isCool = false;

    if(isCool) {
        var deferred = $q.defer();

        portalState.apiPost(
            'api/cats/search',
            { 
                SearchType: 'all',
                SearchTerm: inputValue
            },
            function(response) {
                deferred.resolve(response.data);
            },
            function(response) {
                deferred.resolve(null);
            });

        return deferred.promise;
    }
    else {
        //is there some sort of
        //empty promise I can return
        //so that angular won't
        //throw an error
    }
}

那我return不想打后端电话怎么办?或者是否有更简单的方法来限制 angular md-autocomplete 输入?

如果您查看 Angular Material 上的文档,您可以设置两件事。

使用 md-min-length

在后端开始搜索的字符数

或者 md-delay

的时间量(以毫秒为单位)

请在此处查看md-autocomplete