2017-02-15 7 views
0

Я пытаюсь настроить приложение поиска (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 || ''; 

Не уверен, если это имеет значение, или является причиной этой проблемы?

+0

Можете ли вы, по крайней мере, выполнить полные функции. Некоторый источник кажется отсутствующим. – Thomas

+0

@Thomas, это моя вся функция поиска с объектом конфигурации прямо над ним. – user3125823

+0

@ Томас, я думаю, что я удалил ваш последний комментарий случайно, поиск() находится в моем поискеController – user3125823

ответ

0

Что бы я сделал, после отправки поискового запроса перенаправить пользователя в шаблон search.html, передав запрос в $state.params url. Тогда в SearchController я бы выполнил search(), если есть какие-либо параметры. Таким образом, даже после того, как пользователь обновит страницу, параметры будут по-прежнему на URL-адресе, и будет вызван новый search(), и после общения с API результаты будут или не будут получены.