2016-04-07 3 views
0

У вас есть небольшое поисковое приложение, использующее Elasticsearch и AngularJS. Я использую $state.go() в своем поиске() на моей кнопке ng-submit. searchTerms - это моя ng-модель на входе.AngularJS странное поведение запросов с UI-маршрутизатором

У меня есть 2 контроллера, homeCtrl и searchCtrl. homeCtrl для домашней страницы, которая является просто полем поиска и предоставляет функции автозаполнения. searchCtrl - для страницы результатов и имеет одинаковое поле поиска и предоставляет область результатов.

Когда я $state.go() так:

$state.go('search', {q: searchTerms}); 

Это решило проблему у меня был, который был

http://localhost:8000/app/search?q=searchTerms 

ВМЕСТО

http://localhost:8000/app/search?q=userTypedInput 

Так что теперь функции URL правильно , но результаты поиска не отображаются ...?


Когда я

$state.go('search', {q: 'searchTerms'}); 

результаты поиска отображаются НО URL не работает, как хотелось бы.

Поэтому в основном то, что я спрашиваю, как я могу получить мой URL, чтобы работать по желанию, который

http://localhost:8000/app/search?q=userTypedInput 

И еще есть отображение результатов поиска?

UPDATE Это мои состояния для пользовательского интерфейса маршрутизатора

$stateProvider 
    .state('home', { 
    url: '/home', 
    templateUrl: 'home/home.html', controller: 'homeCtrl'}) 
    .state('search', { 
    url: '/search?q', 
    views: { 
     '' : { templateUrl: 'search/search.html', controller: 'searchCtrl' } 
     //add more views here when necessary 
    } 
    }); 

searchCtrl

У меня есть это в верхней

'use strict'; 

angular.module("searchApp.search", ['ngAnimate']) 
    .controller('searchCtrl', ['$scope', '$sce', '$stateParams', '$state', 'searchService', function($scope, $sce, $stateParams, $state, searchService) { 

    $scope.searchTerms = $stateParams.searchTerms || null; 

и это поиск(), который содержит $state.go()

$scope.search = function() { 
    resetResults(); 

    var searchTerms = $scope.searchTerms; 

    if (searchTerms) { 
     $scope.results.searchTerms = searchTerms; 
    } else { 
     return; 
    } 

    getResults();//calls searchService which does the searching 

    $state.go('search', {q: searchTerms}); 
    }; 



var getResults = function() { 
$scope.isSearching = true; 

searchService.search($scope.results.searchTerms,$scope.currentPage,... 

Я пытаюсь получить URL, чтобы быть

http://localhost:8000/app/search?q=userTypedInput 

и иметь дисплей результатов, а также.

+0

Отключить 'html5mode' и проверить, он будет работать в противном случае, дайте мне знать – swapnesh

+0

@swapnesh Я сделал html5mode false и без изменений, результаты по-прежнему не отображаются – user3125823

+0

Вы не указали необходимую информацию, чтобы выяснить проблему здесь.ui-router отвечает за построение URL и загрузку страницы. Невозможно узнать, почему результаты не отображаются из кода, который вы отправили – Austin

ответ

1

В вашей конфигурации состояния вы используете имя параметра q для передачи поискового запроса. Это имя, вы также должны использовать при доступе к параметру от $stateParams в своем searchCtrl. В приведенном выше коде ваш запрос всегда будет нулевым, потому что вы получаете доступ к параметру с именем searchQuery, которого не существует.

+0

Большое вам спасибо, я сделаю исправления и отчитаюсь здесь. – user3125823

+0

Кажется, что параметр, который я использую в моей конфигурации состояния для прохождения поискового запроса, также должен быть таким же, как и моя ng-модель на входе? Я правильно понимаю это сейчас? Я использовал q, потому что это имя ввода. – user3125823

+0

делал больше чтения, и кажется, что я просто изменил мою ng-модель на «q», а также заменил searchTerms на q в searchCtrl - все должно работать по желанию ... – user3125823

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