在我的SPA AngularJS应用程序中,我将网址设为http://localhost:4200/#!/
,而不只是# (hash bang)
。因此,路由似乎不能以通常的方式工作。
我确实经历了这个stackoverflow Question,但没有找到任何解决方案。有人知道摆脱这个额外感叹号的解决方案吗?
编辑:
在我的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('');
}]);
&#13;
但我仍然获得的网址为:http://localhost:4200/#/!/
然后转到http://localhost:4200/about
页面挂起
答案 0 :(得分:3)
尝试使用$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
服务getter和setter与之交互 浏览器URL地址通过HTML5历史记录API。这允许 使用常规URL路径和搜索段,而不是他们的hashbang 等价物。如果浏览器不支持HTML5 History API, $ location服务将回退到使用hashbang URL 自动。这让你不必担心是否 显示您的应用的浏览器是否支持历史记录API;该 $ location服务透明地使用最佳可用选项。在旧版浏览器中打开常规网址 - &gt;重定向到hashbang URL在现代浏览器中打开hashbang URL - &gt;重写为常规 URL请注意,在此模式下,AngularJS会拦截所有链接(受制于 &#34; Html链接重写&#34;以下规则)并以某种方式更新网址 从不执行整页重新加载。
答案 1 :(得分:0)
这种变化可以在角度版本中观察到&gt; 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。
另外,在这里添加的是:
$location
hash-bang网址的哈希前缀已从空字符串“”更改为“bang”!“。如果您的应用程序未使用HTML5 mode
或正在不支持HTML5 mode
的浏览器上运行,并且您尚未指定自己的哈希前缀,则客户端URL现在将包含“!”字首。例如,而不是mydomain.com/#/a/b/c将成为mydomain.com /#!/ a / b / c。