Я пытаюсь настроить приложение поиска (AngularJS и Elasticsearch), чтобы отобразить условия поиска пользователя в URL-адресе на странице результатов после того, как поиск был выполнен. Должен ли этот параметр считаться параметром запроса или параметром url? Я использую UI Router для своих состояний и в настоящее время настроен как параметр запроса, как вы можете видеть ниже. Однако при текущей настройке он прерывает поиск.
Итак, 1), должен ли он быть параметром url? 2) Как правильно настроить мой search()
, чтобы включить параметры в мой Angular $http get
, чтобы поиск работал?
Для моих состояний (ще маршрутизатор)
.state('home', {
url: '/',
Где пользователь вводит условие поиска, а затем
.state('search', {
url: '/search?q',
, где отображаются результаты и больше поисков могут быть выполнены
Для поиска() в моем контроллере
//for query parameters
var config = {
params: {
q: vm.searchTerms
}
};
//search()
vm.search = function() {
$state.go('search', {q: vm.searchTerms});
console.log(vm.searchTerms);
console.log('success - search');
vm.currentPage = 1;
vm.results.documents = [];
vm.isSearching = true;
return coreService.search(vm.searchTerms, vm.currentPage, config
)
.then(function(es_return) {
console.log('success - return');
var totalItems = es_return.hits.total;
var totalTime = es_return.took;
var numPages = Math.ceil(es_return.hits.total/vm.itemsPerPage);
vm.results.pagination = [];
for (var i = 0; i <= 10; i++) {
console.log('success - for');
vm.results.totalItems = totalItems;
vm.results.queryTime = totalTime;
vm.results.pagination = coreService.formatResults(es_return.hits.hits);
vm.results.documents = vm.results.pagination.slice(vm.currentPage, vm.itemsPerPage);
console.log('success - documents');
}
vm.noResults = true;
}),
function(error){
console.log('ERROR: ', error.message);
vm.isSearching = false;
},
vm.captureQuery();
console.log('success - captureQuery');
};
Параметр запроса находится в URL-адресе, но поиск не прерывается.
ОБНОВЛЕНИЕ Подробнее. Вы вводите свой запрос на домашней странице («home»), а затем, как только вы отправляете свой запрос, я использую $ state.go для перехода в состояние («поиск»), которое является страницей результатов. На домашней странице и странице результатов используются 2 разных шаблона для их представлений. Таким образом, у меня есть 2 окна поиска - 1 на главной странице и 1 на странице результатов.
Параметры поиска отображаются в URL-адресе, независимо от того, начинаю ли я с «домашнего» состояния или вводим запрос в состояние «поиск». Все, что ломается, - это функция поиска - которая работает до того, как я попытался реализовать параметр в URL-адресе.
Также я инициализации vm.searchTerms как этот
vm.searchTerms = $stateParams.q || '';
Не уверен, если это имеет значение, или является причиной этой проблемы?
Можете ли вы, по крайней мере, выполнить полные функции. Некоторый источник кажется отсутствующим. – Thomas
@Thomas, это моя вся функция поиска с объектом конфигурации прямо над ним. – user3125823
@ Томас, я думаю, что я удалил ваш последний комментарий случайно, поиск() находится в моем поискеController – user3125823