Я использую typeahead, где при вводе его предложения отображаются в окне поиска, в то время как предложения поступают с сервера.
Он работает нормально, за исключением случаев, когда пользователь печатает очень быстро. Например, если мы вводим storm, отображаются записи. Когда я набираю одно и то же слово со скоростью, предложения не отображаются, пока я получаю данные в ответе. Я проверил, напечатав JSON прямо над полем, поэтому, когда я пишу storm быстро, он показывает 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>
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;
}
<pre>{{header.search}} | {{suggestions|json}}</pre>
на свою страницу и показать нам, что она выводит, когда вы быстро печатаете? - person Buh Buh   schedule 07.10.2016headerService
. Между тем, что показывает консоль вашего браузера, когдаuib-typeahead
выполняетHTTP
запросов по мере ввода? - person Ahmad Baktash Hayeri   schedule 09.10.2016typeahead-wait-ms="400"
, попробуйте сделать это при вызове API, используйте устранение дребезга, а не дроссель - person harishr   schedule 10.10.2016