Angularjs использует фабрику правильно

Мне было интересно, если вы могли бы помочь. У меня есть код ниже, который устанавливает задержку времени ожидания перед отправкой http-запроса. Часы привязаны к полю ввода. Это в настоящее время в моем контроллере, и это работает.

    $scope.$watch('query.keyword',function($http){
    var searchInput = document.getElementById('searchInput').value;
    var minLength = 3;
    var req;

    if (timeout) {
        clearTimeout(timeout);
    }

    timeout = setTimeout(function(){
        var newValue = searchInput;
        if(newValue !== null && newValue.length > minLength) {
            window.alert(newValue);
            req = {
                method: 'SET',
                url: ''
            };
        }
    }, 3000);   
    return $http(req);
});

Теперь я хочу, чтобы это вызывало фабрика / сервис, а не перечисляло его в моем контроллере.

Затем я сделал это...

app.factory('sendSearchData', function($http) {
    var searchInput = document.getElementById('searchInput').value;
    var minLength = 3;
    var req = null;

    if (timeout) {
        clearTimeout(timeout);
    }

    timeout = setTimeout(function(){
        var newValue = searchInput;
        if(newValue !== null && newValue.length > minLength) {
            window.alert(newValue);
            req = {
                method: 'SET',
                url: 'haha.php'
            };
        }
    }, 3000);   
    return function() {
        if($http !== null) {
            return $http(req);
        } else { return 0; }
    };
 });

Не уверен, что возврат верен, так как предыдущий возвращал ошибку HTTP null.

Поэтому, чтобы использовать его, я сделал несколько вариантов кода ниже в моем контроллере.

$scope.$watch('query.keyword', sendSearchData.success());

Но мне не повезло, и он отказывается от рендеринга. Кто-нибудь может помочь?

0 ответов

Другие вопросы по тегам