我試圖配置我的搜索應用(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?
您可以請至少發佈完整的功能。有些來源似乎不見了。 – Thomas
@Thomas,這是我的整個搜索功能,配置對象正好在它上面。 – user3125823
@Thomas,我想我意外地刪除了你最後的評論,search()在我的searchController中 – user3125823