javascript - AngularJS ui 路由哈希前缀

标签 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
  })

最佳答案

当您点击刷新时,服务器实际上会尝试查找给定的路由是否已定义/athletepersonalinfo。要真正从 url 中删除 #,您必须包含一个 get(/*) 路由,该路由始终返回您的 index.html 页面。这条路线应该位于所有其他路线之后。现在,这意味着只要没有定义路由,您的 index.html 就会被提供服务,而不是在客户端 Angular 中处理要加载的 View 。进行此类更改时需要注意的几点

  • 由于任何未解析的 get 都可能返回您的 index.html,因此请确保您的路由有意义,就像您的所有 Assets 都以/assets/路径开头一样,您的所有 api 调用都以/api/开头。

  • 这样做的好处是,如果您在某些 Assets 或 api 调用上收到 404 错误,您仍然会得到错误的 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。

希望这有帮助。

关于javascript - AngularJS ui 路由哈希前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38722410/

相关文章:

javascript - 将instanceof与从函数返回的类一起使用

javascript - 如何从jquery事件函数返回变量值?

javascript - store.sync失败后如何回调?

javascript - 重新计算登录后隐藏元素的指令

angularjs - 浏览器同步 headless 环境错误

javascript - Angular js $state.go 参数不起作用

javascript - Node、express、jade 呈现的页面不与 knockout.js 进行数据绑定(bind)

javascript - 通过 ng-model 为复选框赋值

javascript - AngularJS 多重解析

angularjs - 如何让 ui-router 的 ui-sref 指向嵌套状态?