AngularJS SPA 路由将 URL 获取为"/#!"而不是"#"



在我的SPA AngularJS应用程序中,我获取的URL是http://localhost:4200/#!/,而不仅仅是# (hash bang)。因此,路由似乎无法以通常的方式工作。 我确实经历了这个堆栈溢出问题,但没有找到任何解决方案。有人知道摆脱这个额外感叹号的解决方案吗?

编辑: 在我的index.ejs:我有<a href="#about">about</a>

在我的approutapp.js:我有

var myapp = angular.module("myApp", ["ngRoute"]);
myapp.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "/static/list.ejs"
})
.when("/about", {
templateUrl : "/static/about-us.ejs"
})
});
myapp.config(['$locationProvider', function($locationProvider) {
$locationProvider.hashPrefix('');
}]);

但是我仍然得到的URL:http://localhost:4200/#/!/

并转到http://localhost:4200/about页面挂起

尝试使用$locationProvider.hashPrefix('')

原因是:

如果浏览器是HTML5浏览器angularJS会将其重定向到#!

否则只会#.

阅读有关$location的文档以了解更多信息:

Opening a regular URL in a legacy browser -> redirects to a hashbang
URL Opening hashbang URL in a modern browser -> rewrites to a regular URL 

HTML5 模式

在 HTML5 模式下,$location服务获取者和资源库与 通过 HTML5 历史记录 API 的浏览器 URL 地址。这允许 使用常规 URL 路径和搜索段,而不是它们的哈希爆炸 等价物。如果浏览器不支持 HTML5 历史记录 API, $location服务将回退到使用哈希邦网址 自然而然。这使您不必担心是否 显示您的应用程序的浏览器是否支持历史记录 API;这 $location服务透明地使用最佳可用选项。

在旧版浏览器中打开常规 URL -> 重定向到哈希爆炸 URL 在现代浏览器中打开哈希邦 URL ->重写为常规 网址 请注意,在此模式下,AngularJS会拦截所有链接(受制于以下 下面的"Html 链接重写"规则)并以某种方式更新 URL 从不执行整页重新加载。

这种变化可以在 angular 版本> 1.6.x 中观察到。在以前的版本中,它只是像#(哈希爆炸)。 要像#方式一样获取网址,您可以简单地以这种方式编写,

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

此更改是在version 1.6.0中引入的,您可以在 https://github.com/angular/angular.js/blob/master/CHANGELOG.md#location-due-to 中看到。

另外,在这里添加那里写的内容:

$locationhash-bang URL 的哈希前缀已从空字符串 " 更改为 bang "!"。如果您的应用程序不使用HTML5 mode或在不支持HTML5 mode的浏览器上运行,并且您没有指定自己的哈希前缀,则客户端 URL 现在将包含"!" 前缀。例如,而不是 mydomain.com/#/a/b/c 将成为 mydomain.com/#!/a/b/c。

相关内容

  • 没有找到相关文章

最新更新