2014-06-15 12 views
1

Использование ui-router, есть ли способ захватить путь, который содержит косые черты и параметры запроса?Поймать весь маршрут URL, который позволяет параметры запроса

Скажем, есть подвох, все правила в состоянии конфигурации:

var exState = { 
    url: '/example/*path', 
    ... 
}; 
$stateProvider.state(exState); 

, а затем указать мой браузер

/example/test1?var1=a&var2=b/test2?var3=c&var4=d/

Теперь я вижу, что слэша получить закодированы:

test1?var1=a&var2=b%2Ftest2%3Fvar3&var4=d%2F

и $stateParams.path is test1 - не то, что я хотел. Можно ли получить фактический «необработанный» путь для дальнейшей обработки, избегая при этом автоматического запроса параметров, который выполняет здесь ui-router?

+0

Почему бы вам не поставить часы на переменную, которая контролирует переход? – Paras

+0

@hasH: извините, я не следую. Не могли бы вы уточнить? Вы имеете в виду часы '$ stateChangeSuccess' и его' toParams', который имеет такое же значение. – amergin

ответ

1

Вы можете сделать это, но вы должны будете использовать Regex с вашим государством URL, это из Руководства UI-маршрутизатор (https://github.com/angular-ui/ui-router/wiki/URL-Routing):

Regex Parameters 

A bonus to using curly brackets is the ability to set a Regular Expression rule for the parameter: 

// will only match a contactId of one to eight number characters 
url: "/contacts/{contactId:[0-9]{1,8}}" 
Examples: 

'/user/{id:[^/]*}' - Same as '/user/{id}' from the previous example. 

'/user/{id:[0-9a-fA-F]{1,8}}' - Similar to the previous example, but only matches if the id parameter consists of 1 to 8 hex digits. 

'/files/{path:.*}' - Matches any URL starting with '/files/' and captures the rest of the path into the parameter 'path'. 

'/files/*path' - Ditto. Special syntax for catch all.` 

Это один должен поймать свой адрес и строку параметров : '/files/{path:.*}' - Соответствует любому URL, начинающемуся с '/ files /', и фиксирует остальную часть пути в параметре «путь».

EDIT: После захвата остальной части URL в параметре path вам нужно URL расшифровывать для того, чтобы вернуть себе / & ? и что-нибудь еще закодированный. Вы можете использовать decodeURIComponent()

+0

Я думал, что просто применил то же самое правило, что и в документах. Проблема, я полагаю, заключается в том, что ui-router использует регулярное выражение для захвата параметров запроса даже в правиле catch. Я могу захватить url как '/ example/test1/test2/test3/test4 /' просто отлично - проблемы - это параметры запроса. Вики также заявляет, что вы не можете вставлять косые черты в regex'es. Моя проблема заключается в том, что URL-адрес не является иерархическим, а «пример» может сопровождаться 2 или 20 последовательными разделами, поэтому я хочу, чтобы исходный путь был сам, поэтому я могу управлять им самостоятельно. – amergin

+0

Чтобы лучше понять, мой вопрос связан с другой проблемой http://stackoverflow.com/questions/24224543/non-hierarchical-url-scheme-for-a-dashboard-application. – amergin

+0

Если чертовы черты и что-нибудь еще закодировать, не можете их декодировать? Путь отсутствует во всем, кроме 'test1'? –

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