Javascript AngularJS SPA路由获取URL为“/”&引用;而不是",#&引用;
在我的SPA AngularJS应用程序中,我得到的URL是Javascript AngularJS SPA路由获取URL为“/”&引用;而不是",#&引用;,javascript,html,angularjs,mean-stack,hashbang,Javascript,Html,Angularjs,Mean Stack,Hashbang,在我的SPA AngularJS应用程序中,我得到的URL是http://localhost:4200/#!/而不仅仅是#(hash bang)。正因为如此,路由似乎不能以通常的方式工作。 我确实经历了这个stackoverflow,但没有找到任何解决方案。有人知道摆脱这个额外感叹号的解决方案吗 编辑: 在myindex.ejs: 我有 在我的approutapp.js: 我有 var myapp=angular.module(“myapp”、[“ngRoute”]); myapp.confi
http://localhost:4200/#!/代码>而不仅仅是#(hash bang)
。正因为如此,路由似乎不能以通常的方式工作。
我确实经历了这个stackoverflow,但没有找到任何解决方案。有人知道摆脱这个额外感叹号的解决方案吗
编辑:
在myindex.ejs:
我有
在我的approutapp.js:
我有
var myapp=angular.module(“myapp”、[“ngRoute”]);
myapp.config(函数($routeProvider){
$routeProvider
.当(“/”时{
templateUrl:“/static/list.ejs”
})
.when(“/about”{
templateUrl:“/static/about us.ejs”
})
});
myapp.config(['$locationProvider',函数($locationProvider){
$locationProvider.hashPrefix(“”);
}]);代码>尝试使用$locationProvider.hashPrefix(“”)
原因是:
如果浏览器是HTML5,则angularJS
会将其重定向到#代码>
否则它将仅为#
请阅读上的此文档以了解有关此方面的更多信息:
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与
通过HTML5历史API的浏览器URL地址。这就允许
使用常规URL路径和搜索段,而不是它们的hashbang
等价物。如果浏览器不支持HTML5历史API,
$location服务将退回到使用hashbang URL
自动地这使您不必担心
显示应用程序的浏览器是否支持历史API;这个
$location service透明地使用了最佳可用选项
在旧式浏览器中打开常规URL->重定向到hashbang
URL在现代浏览器中打开hashbang URL->重写为常规
URL注意,在这种模式下,AngularJS截取所有链接(根据
下面是“Html链接重写”规则),并以某种方式更新url
从不执行整页重新加载的
这种变化可以在角度版本>1.6.x中观察到。在上一个版本中,它就像是只有#
(hash-bang)一样。
要仅以类似于
的方式获取url,您只需以这种方式编写
appModule.config(['$locationProvider', function($locationProvider) {
$locationProvider.hashPrefix('');
}]);
此更改是在版本1.6.0
中引入的,您可以看到
此外,在此处添加所写内容:
$location
哈希bang URL的哈希前缀已从空字符串“”更改为bang“!”。如果您的应用程序不使用HTML5模式
,或者正在不支持HTML5模式
的浏览器上运行,并且您没有指定自己的哈希前缀,那么客户端URL现在将包含一个“!”前缀。例如,而不是mydomain.com/#/a/b/c将成为mydomain.com/#/a/b/c
是的,但给出的答案无效!:(它是如何工作的?您能否提供一个问题的详细信息以供审查?url/#/!/
与/#!
不同;这看起来可能是服务器上的某个内容,而不是角度。在添加$locationProvider.hashPrefix(“”)之前);
我得到了http://localhost:4200/#!/
。添加您标记为重复的帖子中提供的解决方案后,我得到http://localhost:4200/#/!/
@Pritam,不,事实上问题似乎在其他地方。但感谢您的帮助。这就是我投票的原因:)