我正在使用typeahead,在搜索框中输入其显示建议的位置,同时从服务器获取建议。当用户输入速度非常快时,Typeahead不起作用
它的工作正常,除非用户类型真的很快。例如,如果我们键入风暴它显示记录。当输入速度相同的单词时,在响应中收到数据时,不会显示其建议。我已经通过打印JSON在盒子上方进行检查,因此当我快速写下暴风雨时,它显示JSON但未显示以下建议。
下面是HTML
<input type="text" ng-model="header.search"
typeahead-on-select="searchClicked($item)"
uib-typeahead="state as state.data.name for state in suggestions | filter:$viewValue | limitTo:8"
typeahead-min-length="0" placeholder="Søg..." search-products>
搜索产品是指令中使用广播搜索值。这是指令代码。
APP.directive('searchProducts', searchProducts);
function searchProducts($state) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$watch(attrs.ngModel, function(searchVal) {
scope.$broadcast('searchTheProducts', searchVal);
});
}
};
}
这里是我们获取数据的服务调用。
$scope.$on('searchTheProducts', function(event, query) {
if (query) {
headerService.getSearchSuggestions(query).then(
function(response) {
$scope.suggestions = response;
},
function(err) {
console.log('Error: ' + err);
}
);
}
});
这里是业务逻辑
function getSearchSuggestions(query) {
pendingRequests.cancelAll();
var url = ApiBaseUrl + "/search/suggestions?query=" + query;
var deferred = $q.defer();
pendingRequests.add({
url: url,
canceller: deferred
});
pending = true;
$http({
method: "GET",
url: url,
timeout: deferred.promise
}).then(
function(successData) {
deferred.resolve(successData.data.data);
},
function(err) {
deferred.reject(err);
}
);
return deferred.promise;
}
您可以在您的网页上添加“
”并向我们展示快速输入时的输出内容吗? –ston | [ { “类型”: “产品”, “数据”:{ “名”: “石器时代钢琴” } }, { “类型”: “主管部门”, “数据” :{ “名”:“石器时代减肥食品” } } ] – naCheex
我写了斯通的显示输出,但在dropownlist深藏不露,当我按下退格突然其显示 – naCheex