[英]Angular-UI-Router: ui-sref not building href with parameters
[英]Use “/” as Optional Separator for Parameters in Url - Angular-Ui-Router
我有一个棘手的问题,我有一段时间无法解决。
基本上,当我在某条$route
并且我做了某个$state.go(routeName, params);
,我需要在网址上附加一个parameter
或多个parameters
。
另外,要注意路径也可以在没有参数的情况下访问,因此它必须是干净的。
我想实现这个结果:
localhost:4000
localhost:/4000/myRoute/myStuff/myParam
localhost:/4000/myRoute//
$state.go(myRoute)
localhost:/4000/myRoute//
如果提供了没有参数的$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
编辑
使用{param}
和:param
是一样的。 参考angular-ui / ui-router URL路由
我找不到任何解决方案也在寻找在url中创建可选参数的方式提供的答案? 。 尝试myRoute[/:param1[/:param2]]
也会抛出错误。
编辑
同时尝试param1%2F
或'param1' + '%2F'
也行不通。 我分别得到~2F
和%252f
作为分隔符。 同时执行decodeURI('%2F')
会导致相同的悲惨结果。
如有任何澄清,请发表评论。 提前致谢。
$stateProvider.state('state', {
url: "/state/:id/:name/:something",
templateUrl: "bla.html",
controller: 'BlaCtrl'
});
$state.go('state', {id: 1, name: 'pepe', something: 'nothing'});
这对我有用 ,产生: / state / 1 / pepe / nothing
你不能创建一条母亲路线和一条儿童路线吗? 这不可能吗?
你不需要制造所有这种机器来实现你想要的。 正如@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:
$state.go('myRoute');
$state.go('myRoute.myStuff', { param1 : 'HeyOhLetsGo' });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.