2015-04-29 3 views
6

Учитывая следующий JavaScript:как передать параметр запроса с othwerwise функции

$stateProvider 
    .state('search', { 
    url: '/search?query', 
}) 
; 

$urlRouterProvider.otherwise("search"); 

Когда я получить доступ к странице

base_url?query=x 

Я попадаю в

base_url/Поиск

, но параметр запроса теряется.

Есть ли способ передать параметр запроса в противном случае?

ответ

8

Существует a working plunker

ПИ-маршрутизатор имеет родное разрешение здесь.

otherwise не обязательно должен быть строкой «url», это может быть функция.

Проверьте его в действии в этом Q & A:

How not to change url when show 404 error page with ui-router

Код может выглядеть так:

$urlRouterProvider.otherwise(function($injector, $location){ 
    var state = $injector.get('$state'); 
    state.go("search", $location.search()); // here we get { query: ... } 
    return $location.path(); 
}); 

$location.search() даст нам Params объект, который может быть подобный: { query: ... }. Мы принимаем его и перенаправлять заявить поиск с этим Params ...

Проверить это here

+0

Это не работает для меня с включенным html5mode. Также в plunkr прокомментировано. Можете ли вы привести пример с html5enabled? Я дважды перенаправляюсь. Я напечатал console.log ($ location, $ location.path(), $ location.search()) ;. В первый раз я получаю «/» Object {vid: «Auto1»}, а затем «/» Object {} –

+1

* Я не поклонник или пользователь режима html 5 *, но здесь вы настроенная версия: http: // plnkr.co/edit/yrfOXMeaCJEKt08ihw00?p=preview. В двух словах: Не забудьте включить правильный «абсолютный» url ... потому что мы не живем в безопасности, делаем безопасную маршрутизацию после хеша # –

+0

Я думаю, что нет необходимости писать return $ location.path() ;.Это вызывает дополнительное перенаправление состояния, в то время как мы выдали уже переадресацию состояния с помощью функции state.go. –

0

Вам не нужно, чтобы захватить инжектор и $ state.go, а не на всех. Аргументом для метода otherwise может быть URL-путь, который может содержать ..

Так что в вашем конкретном случае, следующий код может привести вас к base_url/поиск? Запрос = х

$urlRouterProvider.otherwise("/search?query=x"); 

В качестве альтернативы, аргумент может быть функцией, которая возвращает URL-путь. Если вы не знаете, какие параметры URL могли бы иметь, вам просто нужно получить параметры от $location, а затем отформатировать их до строки, подобной URL-адресу, и вернуть ее.