2017-02-15 83 views
0

我試圖配置我的搜索應用(AngularJS和Elasticsearch)在搜索執行後在結果頁面的url中顯示用戶的搜索條件。該參數應該被視爲查詢參數還是url參數?我爲我的狀態使用了UI路由器,並且目前已將它設置爲查詢參數,如下所示。但是,使用當前的設置,它會中斷搜索。

所以1),它應該是一個url參數? 2)如何正確配置我的search()在我的Angular $http get調用中包含params,以便搜索起作用?

對於我的國家(UI路由器)

.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中,但搜索不會中斷。

UPDATE 更多細節。你在首頁('home')輸入你的查詢狀態,然後一旦你提交你的查詢,我使用$ state.go轉換到(搜索)狀態,這是結果頁面。主頁和結果頁面爲其視圖使用2個不同的模板。所以我確實有2個搜索框 - 主頁上有1個,結果頁上有1個。

搜索條件顯示在網址中,我是從「家」開始還是在「搜索」狀態下輸入查詢。所有這些都是搜索功能 - 在我嘗試在url中實現參數之前,WAS正在工作。

而且我初始化這樣

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

不知道是否有差別或導致該問題vm.searchTerms?

+0

您可以請至少發佈完整的功能。有些來源似乎不見了。 – Thomas

+0

@Thomas,這是我的整個搜索功能,配置對象正好在它上面。 – user3125823

+0

@Thomas,我想我意外地刪除了你最後的評論,search()在我的searchController中 – user3125823

回答

0

我會在提交搜索查詢後將用戶重定向到search.html模板,並通過$state.params網址傳遞查詢。然後在SearchController我會執行search()如果有任何params。即使在用戶刷新頁面之後,這些參數仍然會在url上,並且將會調用一個新的search(),並且在與API通信後將會或不會得到結果。