[英]Angular autocomplete with filter:search
I'm looking for a "event" between "filter:search" and my Server-request using $http. 我正在使用$ http寻找“ filter:search”和我的服务器请求之间的“事件”。
Like "autocomplete" on every input keystroke my $http should start a new request 像每个输入击键上的“自动完成”一样,我的$ http应该启动一个新请求
<input ng-model="search">
<li ng-repeat="friend in friends | filter:search">
{{friend.name}}
</li>
Pseudocode.. 伪代码..
// set inputdata
var sPostData = "filter:search";
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
$http.post(sUrl,sPostData).then(function(friendsResponse) {
$scope.friends = friendsResponse.data.ResultSet.result;
});
Is there any hint or example to do this or wrong concept? 是否有任何提示或示例可以做到这一点或错误的概念?
You can use ng-change
directive ie 您可以使用
ng-change
指令,即
HTML: HTML:
<input ng-model="search" ng-change="getData()">
<li ng-repeat="friend in friends | filter:search">
{{friend.name}}
</li>
JS: JS:
//call server on 'search' change
$scope.getData = function(){
$http.post(.....)
}
If you want to do make autosuggestion-like functionality with AJAX data loading, then Angular filter is not right tool for this. 如果您想通过AJAX数据加载来实现类似自动提示的功能,则Angular过滤器不是正确的工具。 Instead you can make use of
$scope.$watch
expression: 相反,您可以使用
$scope.$watch
表达式:
$scope.$watch('search', function(newValue, oldValue) {
if (newValue !== oldValue) {
$http.post(sUrl, {filter: $scope.search}).then(function(friendsResponse) {
$scope.friends = friendsResponse.data.ResultSet.result;
});
}
});
And corresponding HTML: 以及相应的HTML:
<input ng-model="search" ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }">
<li ng-repeat="friend in friends">
{{friend.name}}
</li>
Note, that you no longer need | filter:search
请注意,您不再需要
| filter:search
| filter:search
part. | filter:search
部分。 I also added ngModelOptions for better experience. 我还添加了ngModelOptions以获得更好的体验。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.