如何删除angular-ui-router URL中的"#"符号

Nie*_*ala 75 javascript angularjs angular-ui-router

我正在使用angular-ui-router库,我遇到了URL问题.

我有以下代码:

app.js:

app.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
    .state('state', {
        url: '/state',
        templateUrl: 'templates/state.html',
        onEnter: function () {
            /*... code ...*/
        }
    })});
Run Code Online (Sandbox Code Playgroud)

index.html的:

<a href="#/state">STATE</a>
Run Code Online (Sandbox Code Playgroud)

这有效,但是当我从<a>标签中删除"#"时,这不起作用.

如何从网址中删除"#"符号?

Sim*_*ger 115

如果您想要没有哈希标记的导航,则需要启用HTML5Mode:

app.config(["$locationProvider", function($locationProvider) {
  $locationProvider.html5Mode(true);
}]);
Run Code Online (Sandbox Code Playgroud)

您还需要通过将以下代码添加到<head>HTML文件中来告知angular应用程序的根URL :

<base href="/">
Run Code Online (Sandbox Code Playgroud)

请注意,对HTML5模式的支持取决于浏览器.对于那些不支持History API的人,Angular将回退到hashbang.

  • 另外不要忘记在index.html` <head>`部分中放置一个`<base href ="/">`标记 (37认同)
  • 或者,您可以通过将带有requireBase:false的定义对象传递给$ locationProvider.html5Mode()来将$ locationProvider配置为不需要基本标记:$ locationProvider.html5Mode({enabled:true,requireBase:false}); 请参阅:https://docs.angularjs.org/error/$location/nobase (7认同)
  • 我有另一个问题.当我粘贴网址www.example.com/state时,我没有包含预期内容的网页.我可以用这个做点什么吗? (5认同)

Mis*_*lis 9

如果您使用的是Angular 1.6+,则还需要hashPrefix从URL中删除:

appModule.config(['$locationProvider', function($locationProvider) {
  $locationProvider.hashPrefix(''); // by default '!'
  $locationProvider.html5Mode(true);
}]);
Run Code Online (Sandbox Code Playgroud)

不要忘记改变基地:

<head>
    ...
    <base href="/">
</head>
Run Code Online (Sandbox Code Playgroud)