【问题标题】:Why is AngularJS rewriting hashbang为什么AngularJS要重写hashbang
【发布时间】:2015-09-09 12:58:27
【问题描述】:

为什么AngularJS在我进入的时候会重写地址栏

www.domain.com/index.html/#!/content/sub/content 

www.domain.com/index.html#/!/content/sub/content

/#/!不是标准的 hashbang 语法。我想将其保留为 #!/content/subcontent 然后使用自定义函数解析 url。

我试过了

$location.html5Mode = false;

angular.module('locationModule', [])

    .config(function($routeProvider, $locationProvider) {
        //$locationProvider.hashPrefix('!');
        $locationProvider.html5Mode = false;
    });

两者似乎都没有区别。

【问题讨论】:

  • 您尚未将! 定义为哈希前缀。默认路由不使用!,除非你告诉它

标签: angularjs


【解决方案1】:

默认情况下禁用 HTML5 模式。如果您不想要 /#/,则此前缀由用户设置。

$locationProvider.html5Mode(false).hashPrefix('!');

【讨论】:

  • 谢谢。我还需要包含 angular-route.js
【解决方案2】:

$locationProvider 是 Angular 核心的一部分,用于配置应用程序的路径。默认情况下,Angular 使用 #! 为路由添加前缀,称为 Hashbang 模式。这是显示页面加载由 JavaScript 触发的约定。

我在 app/scripts/app.js 文件中的配置函数中添加了以下代码

在config函数中加入如下代码:

    (function() {
      function config($stateProvider, $locationProvider) {
        $locationProvider
            .html5Mode({
              enabled: true,
              requireBase: false
            });
      }

通过将 html5Mode 方法的 enabled 属性设置为 true,hashbang URL 被禁用;也就是说,用户将看到没有 hashbang 的干净 URL。将 requireBase 属性设置为 false 与 hashbang 问题无关,但这是避免常见 $location 错误的一种方法。

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2011-12-12
    • 2019-02-02
    • 2017-07-30
    • 2014-06-21
    相关资源
    最近更新 更多