AngularJS ui路由哈希前缀

时间:2016-08-02 13:52:33

标签: javascript angularjs angular-ui-router

我正在使用AngularJS ui路由进行路由我想删除#(来自URL的哈希)。我正在使用此代码并在index.html文件中使用(base href =" /")。它工作正常,但当我像(http://0.0.0.0:3000/athletepersonalinfo)刷新页面时,它给了我一个错误。

.config(function($stateProvider,$locationProvider) {
   $locationProvider.html5Mode({ enabled: true, requireBase: false })
   $stateProvider
   .state('/', {
    url: '',
    templateUrl:HTML.HOME,
    controller: 'homeController as home'
    })
   .state('home', {
    url: '/',
    controller: 'homeController as home',
    templateUrl: HTML.HOME
    })

    .state('athletepersonalinfo', {
    url: '/athletepersonalinfo',
    controller: 'athleteProfileInfo',
    templateUrl: HTML.ATHLETE_PERSONAL_INFO,
    authenticate: true
  })

1 个答案:

答案 0 :(得分:1)

当您点击刷新时,服务器实际上会尝试查找是否已定义给定路由/athletepersonalinfo。要从网址中实际删除#,您必须添加get(/*)路由,该路由始终会返回您的index.html页面。这条路线应该在所有其他路线之后。现在这意味着只要没有定义路由,你的index.html将被提供,而不是在客户端,angular将处理要加载的视图。制作这样的chages时几点注意事项

  • 由于任何未解决的get都可以返回index.html,请确保您的路由有意义,例如所有资源都以/ assets / path开头,所有api调用都以/ api /开头。

  • 这样做的好处是,如果您在某些资产上获得404或api通话,您仍会得到index.html这是错误的。但是使用这种方法,你需要做的就是设置一个像这样的路线

    app.get('/:url(api|assets)/*',function(req,res){
        res.status(400).send("Not Found")
    });
    
    app.get('/*',function(req,res){
        res.sendFile('index.html');
    });
    
  • 确保在所有其他路线之后定义*路线,否则您将为每个请求获取index.html。

希望这有帮助。