在%2F中使用斜杠内部斜杠

时间:2014-12-28 15:15:43

标签: angularjs angular-routing

我有以下路线:

window.m.config( ['$routeProvider',($routeProvider) ->
  $routeProvider
  .when('/player/:index', {
    templateUrl: 'view.html',
    controller: 'View'
  })
  .when('/', {
    templateUrl: 'list.html'
    controller: 'List'
  })
]
)

我的一些玩家名字中有/。所以我正在解码它,例如,对于名为a/b的玩家,该玩家的网址将是/player/a%2Fb

但是,当我执行以下操作时,哈希会在我加载应用程序时发生变化,因此它会变为/player/a/b

这使得该页面无法加载该特定播放器。

如果我在非角度应用程序中放入带有%2F的哈希值,则%2F不会转换为/因此不是导致错误的浏览器。但是,如果我然后尝试获取哈希值,我仍然得到/player/a/b,其中编码的斜杠是===到其他斜杠。

我应该如何处理路线变量值内的斜杠?

3 个答案:

答案 0 :(得分:1)

您必须添加

  

*

在路线的尽头。因此,在您的情况下:

'/player/:index*'

这对Angullar 2+也适用。校验 Github issue

答案 1 :(得分:0)

在创建路由参数时,我会用下划线替换/转义斜杠,然后在控制器中重新插入它们 - 这样就可以避免差异。

答案 2 :(得分:0)

所以我刚刚在github上发现了这个并希望提供一个临时修复,在我的应用程序中我注意到它只会路由双重编码的参数,例如我用它作为临时解决方法:

encodeURIComponent(encodeURIComponent("this/string/is/a/param/"))

这似乎对我有用。