Javascript 使用「/&引用;作为Url中参数的可选分隔符-角度Ui路由器
我有一个棘手的问题,我一时没能解决 基本上,当我在某个Javascript 使用「/&引用;作为Url中参数的可选分隔符-角度Ui路由器,javascript,angularjs,routing,angular-ui-router,angular-routing,Javascript,Angularjs,Routing,Angular Ui Router,Angular Routing,我有一个棘手的问题,我一时没能解决 基本上,当我在某个$route上执行某个$state.go(routeName,params)时,我需要将某个参数或多个参数附加到url 另外,要注意这样一个事实,即路线也可以在没有任何参数的情况下访问,因此它必须是干净的 我希望实现这一目标: 实际Url:localhost:4000 需要Url:localhost:/4000/myRoute/myStuff/myParam 避免:localhost:/4000/myRoute/如果未提供任何参数的$sta
$route
上执行某个$state.go(routeName,params)时
,我需要将某个参数
或多个参数
附加到url
另外,要注意这样一个事实,即路线也可以在没有任何参数的情况下访问,因此它必须是干净的
我希望实现这一目标:
- 实际Url:
localhost:4000
- 需要Url:
localhost:/4000/myRoute/myStuff/myParam
- 避免:
如果未提供任何参数的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\/'
localhost:4000/myRoute/myStuff~2FmyParam
。
但是,如果我使用另一个分隔符,比如-
,它就可以正常工作
param1:'myStuff-'
导致localhost:4000/myRoute/myStuff-myParam
编辑
使用{param}
和:param
是相同的。参考文献
我没有找到任何解决方案,也看了在提供的答案。尝试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's:
$state.go('myRoute')代码>
$state.go('myRoute.myStuff',{param1:'HeyOhLetsGo'})代码>
myRoute/
,即使根本没有参数@aravind不,不是在家长,在新的。嗨,谢谢你的回答。当有参数时,它可以工作,但是,如果我执行$state.go(myRoute)
而没有参数,那么在任何情况下都是附加“/”。如果你想要“/”的话,这就是方法。如果您想要可选参数,那么您必须使用命名参数。这正是我想要的。我真的没想过。这也肯定比我想做的容易。谢谢。这太不公平了,我想要那个赏金:'(