2017-02-15 9 views
0

検索を実行した後、結果ページのURLにユーザーの検索語を表示するように検索アプリケーション(AngularJSとElasticsearch)を設定しようとしています。そのパラメータをクエリパラメータまたはURLパラメータと見なすべきですか?私は自分の州のUIルータを使用していますが、現在は以下のようにクエリパラメータとして設定しています。ただし、現在の設定では、検索が中断されます。

だから、それはURLパラメータである必要がありますか? 2)正確に私のsearch()を構成して、角膜$http getコールでパラメータを含むようにして、検索が機能するようにしますか?私の状態については

(UIルータ)を

.state('search', { 
     url: '/search?q', 

ユーザーが検索用語を入力

.state('home', { 
     url: '/', 

、結果が表示され、より多くの検索は、検索のために

を行うことができます()私のコントローラで

//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を使用して結果ページである( 'search')状態に移行します。ホームページと結果ページでは、それぞれのビューに2つの異なるテンプレートを使用します。だから、私は2つの検索ボックスを持っている - ホームページに1、結果ページに1。

「ホーム」状態から開始するか、「検索」状態でクエリを入力するかは、検索条件がurlで表示されています。そのすべてが壊れているのは検索機能です。これはURLにパラメータを実装しようとする前に機能していました。それが違いを作るか、問題を引き起こしている場合

はまた、私はこの

vm.searchTerms = $stateParams.q || ''; 

わからないようなvm.searchTermsを初期化?

+0

少なくとも完全な機能を投稿できますか?一部の情報源が見当たりません。 – Thomas

+0

@Thomas、それはその上にconfigオブジェクトを持つ私の全検索機能です。 – user3125823

+0

@トーマス、私は偶然あなたの最後のコメントを削除したと思います。search()は私のsearchControllerにあります – user3125823

答えて

0

urlでクエリを渡したsearch.htmlテンプレートにユーザーをリダイレクトするための検索クエリを送信した後に行うことです。その後、SearchControllerには、パラメータがあればsearch()を実行します。この方法では、ユーザーがページを更新した後でも、パラメータはURLに残っており、新しいsearch()が呼び出され、APIとの通信後に結果が表示されます。

関連する問題