0

我想知道你能不能帮忙。我有下面的代码,它在发出 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());

但我没有运气,它拒绝渲染。任何人都可以帮忙吗?

4

0 回答 0