2016-10-14 2 views
0

Я создал небольшое приложение для поиска фильмов с AngularJS, UI Router, UI Bootstrap Typeahead и Elasticsearch. Для справки я вчера спросил this и получил хороший, быстрый ответ. Мне удалось заставить его работать без ng-keypress. Я просто положил $state.go() прямо в функцию и сработал связывание/переход. При нажатии клавиши «ввод» на вкладке «Поиск» она выводится на странице «Главная страница/запрос» на страницу результатов. Однако он НЕ отображает никаких предложений. Как только он попадает на страницу результатов ... ничего не происходит. Я должен снова ввести запрос поиска для предложений и поиска для выполнения.

Я действительно пытаюсь получить функциональность, где на hp, как только пользователь вводит на вход поиска, что он идет на страницу результатов И как только он туда доберется, эти предложения отображаются и поиск может быть выполнен.

Вот мой код

HTML

<form ng-submit="vm.search()" class="form-horizontal col-md-8 col-md-offset-2" id="hp-search-form"><div class="input-group input-group-lg"> 
<input type="text" name="q" ng-model="vm.searchTerms" ng-keypress="navigate('search')" placeholder="Search" class="form-control input-lg" uib-typeahead="query for query in vm.getSuggestions($viewValue)" typeahead-show-hint="true" typeahead-focus-first="false" typeahead-on-select="vm.search($item)" auto-focus style="border:0px;"> 
    <i ng-show="loadingLocations" class="fa fa-refresh"></i> 
    <div ng-show="noResults"> 
    <i class="fa fa-remove"></i> No Results Found 
    </div> 
<span class="input-group-btn"> 
<button class="btn btn-primary btn-lg" type="submit" value="Search" id="hp-search-button" ng-submit="vm.search()"><i class="fa fa-search fa-lg"></i></button> 
</span> 

и функция getSuggestions в searchCtrl

vm.getSuggestions = function(query) { 
    $state.go('search'); 
    console.log(vm.searchTerms); 
    vm.isSearching = true; 
    console.log(vm.searchTerms); 
    return searchService.getSuggestions(query).then(function(es_return){ 
    console.log(vm.searchTerms); 
    var suggestions = es_return.hits.hits; 
    if (suggestions) { 
     //console.log(suggestions); 
     return vm.autocomplete.suggestions = suggestions.map(function(item) { 
     return item._source.ymme; 
     //console.log(autocomplete.suggestions); 
    }); 
    } 
    else { 
    vm.autocomplete.suggestions = []; 
    vm.noResults = true; 
    } 
    vm.isSearching = false; 
    }, 
    function(error) { 
    //console.log('ERROR: ', error.message); 
    vm.isSearching = false; 
    }); 
}; 
+0

если вы написали $ state.go ('search'); , дальнейший код не будет выполнен, попробуйте сделать plunker –

+0

@MandeepSingh - Я предполагаю, что «когда» должно быть «где» я написал $ state.go («поиск»). Я попробую сделать плункер, может занять некоторое время - никогда не делал этого раньше. Так что независимо от того, где я ставлю $ state.go - код перестанет выполняться ...? – user3125823

+0

Почему вы меняете состояние для получения результатов поиска. – pritesh

ответ

0

Вы можете передать результаты наряду с $ состоянии. go():

$state.go('search', { results: vm.autocomplete.suggestions }); 

Вам понадобится сделать $ state.go() в разделе, где вы возвращаете результат c. В config.routes.js файле, где у вас есть «поиск» определено, вы также будете нуждаться в этом, так что следующая страница может принять «результаты» в рамках state.params $:

params: { 
    results: null 
    } 

В «поиск» страницы, то вы можете получить доступ к результатам поиска с помощью этого:

$state.params.results 

затем вы можете сделать работу что-то делать с результатами.

+0

Я собираюсь попробовать, спасибо – user3125823

 Смежные вопросы

  • Нет связанных вопросов^_^