Angularjs正确使用工厂

时间:2016-07-19 16:14:10

标签: html angularjs angularjs-factory angularjs-watch

我想知道你是否可以提供帮助。 我有以下代码,它在发出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 个答案:

没有答案