【问题标题】:Why is there #! in the url of my angular app为什么会有#!在我的角度应用程序的网址中
【发布时间】:2017-04-28 12:19:17
【问题描述】:

由于某种未知原因,我在 Visual Studio 2015 中进行调试时已将 '#!' 添加到我的应用程序 URL 中。

网址看起来像这样

http://localhost:58394/#!/customers
http://localhost:58394/#!/

如果这是某种拼写错误,我已经搜索了所有应用程序,但我无法弄清楚这是从哪里来的。

我可以在 ASP.NET WEB API 以及 ASP.NET CORE WEB API 中看到...

对于前端,我使用 angular 和 angular-route 1.6.0

任何想法来自哪里?

我没有使用 html5mode 也没有使用基本标签,我很高兴现在 # 在那里,我只是不明白为什么其中有感叹号 (!) ...

此应用不得部署在网络上,并且未使用任何可能使用 #! 的外部服务任何跟踪或其他任何东西的符号。

感叹号最近才开始出现,所以我猜这是我正在使用的一些库引起的。

我只是想知道为什么 '!' 存在,以及它在哪个库中强制出现这种感叹号。

【问题讨论】:

  • 这不是 Visual Studio 添加的,是您的 JavaScript 框架添加的

标签: asp.net angularjs asp.net-web-api asp.net-core


【解决方案1】:

你应该申请this,以免有角度的哈希爆炸

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

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

对于 angular 2,我认为这就足够了:

<base href="/" />

根据您的评论,您似乎是如何切换 Hashbang 模式的

配置:

$routeProvider
  .when('/path', {
    templateUrl: 'path.html',
});
$locationProvider
  .html5Mode(false)
  .hashPrefix('!');

请看this

【讨论】:

  • 我没有使用 html5mode 也没有使用基本标签,我很高兴# 现在在那里,我只是不明白为什么那里有感叹号 (!) ...
  • 不确定是#!在我的情况下被反斜杠包围... /#!/
【解决方案2】:

我在 angualr 1.6.0 更新日志中找到了这个

$location: 默认 hashPrefix 为 '!' (aa077e, #13812)

更新日志:https://github.com/angular/angular.js/blob/master/CHANGELOG.md

更改:https://github.com/angular/angular.js/commit/aa077e81129c740041438688dff2e8d20c3d7b52

重大变化

$location hash-bang URL 的哈希前缀已从 空字符串“”到爆炸“!”。如果您的应用程序不使用 HTML5 模式或正在不支持 HTML5 模式的浏览器上运行, 并且您还没有指定自己的哈希前缀然后是客户端 URL 现在将包含一个“!”字首。例如,而不是 mydomain.com/#/a/b/c 将变为 mydomain/#!/a/b/c

要恢复到旧的方式只需使用

appModule.config(['$locationProvider', function($locationProvider) {
    $locationProvider.hashPrefix('');
}]);

【讨论】:

  • 终于!!一旦我重新检查了迁移 1.5>1.6 注释(应该早点完成),我终于找到了你的答案。浪费了将近一天的时间试图弄清楚这一点。该死 !快把我逼疯了。
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 2022-01-08
  • 2013-05-06
  • 2020-05-22
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多