AngularJS默认URL没有哈希标记

3

目前我在我的Angular网站中为URL打开了html5模式。

但是我想知道是否有办法让我的默认URL加载时不带“#!/”,即域名/#!/,我知道当我切换到一个路由时它会回来,但在默认URL主页中没有它会很好。

这是我的当前路由提供程序:

app.config(['$routeProvider','$locationProvider', function($routeProvider,$locationProvider){
  'use strict';
  $routeProvider
    .when('/',{
      templateUrl: '/views/search.html',
      controller : 'SearchCtrl'
    })
    .when('/result',{
      templateUrl: '/views/result.html',
      controller : 'resultCtrl'
    })
    .when('/options',{
      templateUrl: '/views/options.html',
      controller : 'optionsCtrl'
    })
    .otherwise({
      redirectTo: '/'
    });
  $locationProvider.html5Mode(false);
  $locationProvider.hashPrefix('!');
}]);

我怀疑你做的任何事情都会被认为是黑客行为。前缀是ngRoute内部处理的内容。这真的有那么大的问题吗?您的主页URL仍然可以使用它或不使用它。 - Brett
2个回答

9

哈希模式是HTML5的后备方案,因此可以:

  • 使用HTML5
  • 修改AngularJS
  • 将主页放在Angular应用程序之外
  • 在Web服务器上重写/转发URL

更多信息请参见$location


0
如果您没有使用服务器端语言,则将此代码放置在HTML头中。
<base href="/">

例如:

<head>
    <base href="/">
</head>

并将此放入配置块中:

$locationProvider.html5Mode(true);

如果您正在使用服务器端语言,则使用以下代码:

app.get('*', function(req, res) {
    res.render('index');
});

使用“代替”

app.get('/', function(req, res) {
    res.render('index');
});

并将此代码放入配置块中:

$locationProvider.html5Mode(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接