Я построил небольшое поисковое приложение, используя AngularJS, UI Router и Elasticsearch. У меня есть 2 шаблона, в которых есть один контроллер. Все работает правильно ... за исключением тех случаев, когда я пытаюсь реализовать параметры запроса.AngularJS UI Маршрутизатор и поиск
Один шаблон - простой hp для ввода поискового запроса или выбора из автозаполнения (UI Bootstrap Typeahead). Другой шаблон предназначен для результатов поиска и поиска (поле поиска и область для отображения результатов поиска).
Мои состояния выглядеть следующим образом:
.state('query', {//home
url: '/',
templateUrl: 'search/query.html',
controller: 'searchCtrl as vm'
})
.state('search', {//results
url: '/search?q',
templateUrl: 'search/search.html',
controller: 'searchCtrl as vm'
});
Я использую $ state.go (в searchCtrl) от пользовательского интерфейса маршрутизатора для перехода между состояниями.
vm.search = function() {
$state.go('search', {q: vm.searchTerms});
...
Что происходит, что после ввода запроса/выбора автозаполнения он переходит в состояние «поиск», но я вижу это в URL
http://localhost:8000/app/#/search?q=%5Bobject%20Object%5D
Тогда я должен снова ввести запрос и url изменяется на
http://localhost:8000/app/#/search?q=userinput
Наконец, я должен снова ввести запрос для выполнения поиска. Очевидно, я хочу, чтобы все это происходило с ОДНОЙ отправкой. Что я делаю не так?
Любые предложения или идеи?
UPDATE У меня есть это в отдельном файл run.js
.run(['$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
UPDATE 2 Я получаю ту же ошибку, использую ли я свой код или код. Похоже, что когда я перехожу из «состояния» в «состояние», этот поиск возвращается с помощью метода $scope works in Angular. Я не уверен, как это разрешить, потому что я не уверен, что предоставленное там решение будет работать с синтаксисом controllerAs
. Было бы разумнее иметь autocompleteCtrl
для страницы hp/query и иметь запросService, введенный в каждый контроллер для searchTerms
? Pls дает немного больше времени, чтобы разблокировать кодеп, отправит вам комментарий, когда будет сделано.
Я использую 1.5, да выглядит очень похоже на то, что я делаю. Только разница - 2 $ stateProvider линии к нижней. У меня есть что-то подобное в отдельном файле - Ill post update на вопрос. – user3125823
В кодедене, который я написал, это то, чего вы пытаетесь достичь? Почему вы назначаете состояния и параметры для rootScope? Вы можете ввести их в контроллер и получить к ним доступ при создании экземпляра контроллера. – mchaffe
yes Кодепен - это то, что я пытаюсь достичь – user3125823