我想知道你能不能帮忙。我有下面的代码,它在发出 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());
但我没有运气,它拒绝渲染。任何人都可以帮忙吗?