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

IT技术 javascript angularjs angular-ui-router
2021-03-14 01:03:24

我正在使用 angular-ui-router 库,但 URL 有问题。

我有以下代码:

应用程序.js:

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

索引.html:

<a href="#/state">STATE</a>

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

如何从 URL 中删除“#”号?

3个回答

如果你想要没有哈希标签的导航,你需要启用 HTML5Mode:

app.config(["$locationProvider", function($locationProvider) {
  $locationProvider.html5Mode(true);
}]);

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

<base href="/">

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

这取决于您的服务器。您需要显示与从 angular 应用程序根目录相同的视图。AngularJs 足够聪明,可以查看 URL 并显示适当的视图/控制器。例如,如果你通常从 /angular 继续你的应用程序,你需要处理这种情况,即去 /angular/state 实际上并没有映射到真实的 URL,但实际上是 /angular 中的一个路由并显示相同看法。
2021-04-18 01:03:24
也不要忘记<base href="/">在 index.html<head>部分中放置一个标签
2021-04-21 01:03:24
或者,您可以通过将带有 requireBase:false 的定义对象传递给 $locationProvider.html5Mode(): $locationProvider.html5Mode({ enabled: true, requireBase: false }); 将 $locationProvider 配置为不需要基本标记。请参阅:docs.angularjs.org/error/$location/nobase
2021-04-24 01:03:24
我还有一个问题。当我粘贴 URL www.example.com/state 时,我没有包含预期内容的页面。我可以用这个做点什么吗?
2021-05-04 01:03:24
@SimonBelanger 我正在使用 mvc4 并且我已经为用户特定模型控制器创建了区域并查看我的登录页面在 Areas/Admin/View/Home/Index 中,它使用 _Layout 作为主模板我应该如何在 base href 中编写 url ?
2021-05-07 01:03:24

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

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

不要忘记更改底座:

<head>
    ...
    <base href="/">
</head>
    yourApp.config(function ($stateProvider, $urlRouterProvider,$locationProvider) {

    $urlRouterProvider.otherwise('/home');

    //add this line in your routing code   
    $locationProvider.html5Mode(true);

    $stateProvider.state('web.home', {
                url: '/home',
                templateUrl: 'pages/home.html',
                controller: 'mainController'         
            })
    }

在你的 index.php 或 index.html 中 <head> 标签插入

< base href="/" >

对于CodeIgniter

<base href=" < ?php echo base_url() ?  >" >