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\/'
但所有这些都指向相同的url
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'})

您想让参数处于父状态吗?@adashbob正如我在问题上所写的,这将导致始终拥有
myRoute/
,即使根本没有参数@aravind不,不是在家长,在新的。嗨,谢谢你的回答。当有参数时,它可以工作,但是,如果我执行
$state.go(myRoute)
而没有参数,那么在任何情况下都是附加“/”。如果你想要“/”的话,这就是方法。如果您想要可选参数,那么您必须使用命名参数。这正是我想要的。我真的没想过。这也肯定比我想做的容易。谢谢。这太不公平了,我想要那个赏金:'(