带过滤器的角度自动完成:搜索

时间:2015-02-03 11:09:27

标签: javascript angularjs autocomplete

我正在使用$ http在“过滤器:搜索”和我的服务器请求之间寻找“事件”。

就像每次输入击键上的“自动完成”一样,我的$ http应该开始一个新请求

<input ng-model="search">
<li ng-repeat="friend in friends | filter:search">
  {{friend.name}}
</li>

伪代码..

// 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;


});

是否有任何提示或示例来做这个或错误的概念?

2 个答案:

答案 0 :(得分:0)

您可以使用ng-change指令,即

HTML:

<input ng-model="search" ng-change="getData()">
<li ng-repeat="friend in friends | filter:search">
      {{friend.name}}
</li>

JS:

//call server on 'search' change

$scope.getData = function(){

    $http.post(.....)

}

答案 1 :(得分:0)

如果你想在AJAX数据加载时做类似自动提取的功能,那么Angular过滤器就不适合这个。相反,您可以使用$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;
        });
    }
});

相应的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>

请注意,您不再需要| filter:search部分。我还添加了ngModelOptions以获得更好的体验。