我正在使用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