2017-02-16 3 views
0

Я пытаюсь настроить параметры запроса с помощью UI-маршрутизатора и думаю, что, наконец, понял, почему мне так сложно с ним работать. Я строй небольшого поиска приложения, которое имеет 2 состояние:Параметры запроса UI-маршрутизатора и несколько состояний

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

.state('search', { 
     url: '/search', 
     }, 

Дом штат имеет свой собственный шаблон (вид) и так же состояние поиска. Они имеют один и тот же контроллер. В основном все исходное состояние - это окно поиска, в котором вы можете ввести свой поисковый запрос или выбрать автозаполнение.

После того, как вы представили свой поисковый запрос он идет к поиску состоянию через

$state.go('search'); 

Я пробовал много способов, чтобы получить слово для поиска пользователя (ей) в URL на странице поиска с помощью интерфейса маршрутизатора с синтаксис запросов параметров в url: '/search?q' в сочетании с $ stateParams в контроллере установлен как

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

я включил его в $state.params.q, но это не исправить.

Я успешно смог получить параметры запроса в URL-адресе, однако, когда я это делаю, он нарушает функцию поиска. Параметры автозаполнения и запроса работают и отображаются, но функция поиска останавливается.

Однако, я думаю, что, наконец, понимаю, почему он не работает так, как мне бы хотелось. Я считаю, что это связано с тем фактом, что я использую 2 состояния, а не одно родительское состояние со вложенным дочерним состоянием и что шаблоны не вложены - так что $ scope не наследует. Я приближаюсь к этой работе ... он переходит из домашнего состояния в состояние поиска, отображая параметры запроса в URL-адресе поискового запроса ... его просто этот поиск разбивается, но работают параметры автозаполнения и запроса.

То, что я пытаюсь достичь, состоит в том, чтобы пользователь вводил условия поиска из исходного состояния, а затем отображал результаты в состоянии поиска вместе с параметрами запроса в URL-адресе. Есть ли что-нибудь, что мне нужно делать с дома состояние или поиск заявить, что я не делаю?

ИЛИ

Есть ли что-нибудь в моем поиске() в мой контроллер, который может быть проблема

//search() 
    vm.search = function() { 
     //$state.go('search', {q: vm.searchTerms}); 
     $state.go('search'); 
     console.log(vm.searchTerms); 
     console.log('success - search'); 
     vm.currentPage = 1; 
     vm.results.documents = []; 
     vm.isSearching = true; 
     return coreService.search(vm.searchTerms, vm.currentPage) 
     .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'); 
     }; 

ответ

0

Вы можете добавить параметр в свой URL двумя способами, используйте двоеточие:

'url': '/search/:query' 

или фигурные скобки:

'url': '/search/{query}' 

Затем вы можете использовать go метод $state с параметром для перехода:

$state.go('search', {'query', 'foobar'}); 

Вы можете получить доступ значение параметра из контроллера с помощью params члена вашей $state объекта:

console.log($state.params.query); 

или непосредственно от объекта $stateParams:

console.log($stateParams.query); 

Код: https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters

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