从 $resource 自动完成 Angularjs

Autocomplete Angularjs from $resource

我对自动完成和 angularjs 有疑问。我每次输入时都会收到几个 ajax 请求,但这是无法使用的。我尝试使用超时但没有成功。这是代码:

$scope.autoCompleteResults = function(){
        $scope.aborter = $q.defer();

        $scope.resource = $resource(URL, {}, {
            getAutocompleteResults: {
                method: "GET",
                timeout: $scope.aborter.promise
            }
        });

        $scope.resource.getAutocompleteResults({}, function (data) {
            if ($scope.searchTxt.length > 1) {

                $scope.autocompleteViewResults = data.data;
                $scope.aborter.resolve();

            } else {
                $scope.autocompleteViewResults = [];
                $scope.search.aborter.reject();
            }
        });
};

您可以尝试使用 ng-model-options 属性来限制 api 次调用。

只需将 ng-model-options="{ debounce: 500 }" 附加到您的输入,模型将在最后一次更改后仅 0.5 秒更新。如果触发器是 ng-change 指令,它将限制查询的数量。 不要犹豫,也可以使用 ng-minlengthng-maxlength

这样的输入指令

此外,当查询已经在进行时,您可以使用布尔值来阻止 api 调用。

你可以这样做。

var Resource = $resource(URL, {},{ getAutocompleteResults: { method: "GET" }});

var locked = false;
function getMoreData() {

    if(locked)
        return;
    locked = true;

    Resource.autoCompleteResults()
        .$promise.then(function(data) {
            $scope.autocompleteViewResults = data;
            locked = false;
        });

}

此外,我强烈建议您将代码逻辑存储到工厂 and/or 服务中。