如何让Angular路由器(或ui-router)接受像`#foo`这样的路由,而不是重定向到`#/ foo`?

时间:2014-01-30 05:59:06

标签: angularjs angular-ui-router

术语

  • #foo:slashless scheme
  • #/foo:slashy scheme

背景

应用程序的某些遗留部分使用(并依赖)无划线方案。我想以非破坏性的方式介绍Angular路由(可能使用ui-router),这样就不会干扰传统路由,以便部分应用程序可以随着时间的推移而优雅地逐步淘汰。一旦发生这种情况,全角应用程序可以立即切换到slashy方案。

到目前为止

我尝试将$locationProvider.hashPrefix('')设置为空字符串,但似乎您只能在#/之间设置字符串,因此无效。

选项

似乎我可以

  • 重写应用的遗留部分,或
  • 默认情况下,重写Angular的$ locationProvider.hashPrefix以包含'/'。因此,将其设置为''会变得有意义。

这两个选项似乎非常耗时。

你知道一个更好的方法让Angular认识到这种无条件的方案吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用重定向!

使用ui-router

app.config(function ($urlRouterProvider) {
  // when there is an 'old' route, redirect to new one
  $urlRouterProvider.when('foo', '/foo');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/(\w+)/i, '/$1'); // UNTESTED!!!!!!
})

关于ui-router wiki

的参考资料

我很抱歉,但是在掠夺者/小提琴中很难测试标签,所以我现在不提供一个...