Используйте " / " в качестве дополнительного разделителя для параметров в Url-Angular-Ui-Router
У меня есть сложный вопрос, который я не смог решить в то время.
По существу, когда я нахожусь на определенном$route и делаю определенный $state.go(routeName, params);, мне нужно добавить определенный parameter или несколько parameters к url.
Кроме того, обратите внимание на то, что маршрут также может быть посещен без каких-либо параметров вообще, поэтому он должен быть чистым.
Я хотел бы добиться такого результата:
- Фактический Url:
localhost:4000 - Искомый Url:
localhost:/4000/myRoute/myStuff/myParam - избегайте :
localhost:/4000/myRoute//Если a$state.go(myRoute)без параметров не предусмотрено.
Например:
$state.go(myRoute, {
param1 : 'myStuff',
param2 : 'myParam'
});
function myRoute($stateProvider) {
$stateProvider
.state('myRoute', {
url: 'myRoute/{param1}{param2}',
parent: 'myParent'
. . .
})
}
Будет работать, но давать localhost:/4000/myRoute/myStuffmyParam.
Итак, я попробовал использовать / в качестве разделителя url: 'myRoute/{param1}' + '/' + '{param2}'
и это работает просто отлично, я получаю localhost:/4000/myRoute/myStuff/myParam.
Но, конечно, / добавляется, даже если параметров нет.
Например, выполнение $state.go('myRoute') приведет к localhost:/4000/myRoute//, что явно неправильно.
param1, я достигну того, что мне нужно.
Итак, я попробовал с
param1 : 'myStuff' + '/'param1 : 'myStuff' + '/'param1 : 'myStuff/'param1 : 'myStuff/'
Но все они ведут к одному и тому же url localhost:4000/myRoute/myStuff~2FmyParam.
В то время как, если я использую другой разделитель, такой как -, он работает просто отлично.
param1 : 'myStuff-' ведет к localhost:4000/myRoute/myStuff-myParam
EDIT
Использование {param} и :param - это одно и то же. Ссылка угловые-интерфейс/интерфейс-маршрутизатор маршрутизации URL-адрес
Я не нахожу никакого решения, также глядя на ответы, предоставленные в способ создания необязательного параметра в url?[81]}. Попытка myRoute[/:param1[/:param2]] также выдаст ошибку.
EDIT
Также попытка param1%2F или 'param1' + '%2F' не сработает.
Я соответственно получаю ~2F & %252f как разделитель. Также выполнение decodeURI('%2F') приводит к такому же жалкому результату.
- Как правильно использовать такой разделитель, избегая его добавления, когда нет параметров, а также правильно визуализировать?
Для любого разъяснения просто оставьте комментарий. Заранее спасибо.
3 ответа:
Вам не нужно создавать все эти механизмы, чтобы достичь того, чего вы хотите. Как сказал @trichetriche, вы можете создать определенный набор дочерних маршрутов.
Вам нужно отредактировать ваш
$routeProviderкак:Вы можете добавить столько детей, сколько захотите, если они вам нужны.//for the clean url - localhost:/4000/myRoute/ $stateProvider .state('myRoute', { url: 'myRoute/', parent: 'myParent' . . . }) //for myStuff/param1 url - localhost:/4000/myStuff/param1 $stateProvider .state('myRoute.myStuff', { url: 'myStuff/{param1}', //also adding other params parent: 'myRoute' . . . })С соответствующим $ состоянием.го:
$state.go('myRoute');$state.go('myRoute.myStuff', { param1 : 'HeyOhLetsGo' });