AngularJS SPA路由获取URL为“/#!”而不是“#”[重复]

Posted

技术标签:

【中文标题】AngularJS SPA路由获取URL为“/#!”而不是“#”[重复]【英文标题】:AngularJS SPA routing getting URL as "/#!" instead of "#" [duplicate] 【发布时间】:2017-11-12 19:50:48 【问题描述】:

在我的 SPA AngularJS 应用程序中,我得到的 URL 是 http://localhost:4200/#!/ 而不仅仅是 # (hash bang)。因此,路由似乎无法以通常的方式工作。 我确实通过了这个 *** 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('');
]);

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

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

【问题讨论】:

是的,但是那里给出的答案不起作用! :( 怎么不工作了?您能否提供该问题的minimal reproducible example 以供审核? 网址/#/!//#!不一样;这看起来可能是你服务器上的东西,而不是有角度的。 在添加$locationProvider.hashPrefix(''); 之前,我得到了http://localhost:4200/#!/。添加您标记为重复的帖子中提供的解决方案后,我收到http://localhost:4200/#/!/ @Pritam,实际上问题似乎出在其他地方。但感谢您尝试提供帮助。这就是我投票的原因:) 【参考方案1】:

尝试使用$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 与 通过 HTML5 历史 API 获取浏览器 URL 地址。这允许 使用常规 URL 路径和搜索段,而不是它们的 hashbang 等价物。如果浏览器不支持 HTML5 History API, $location 服务将回退到使用 hashbang URL 自动地。这使您不必担心是否 显示您的应用的浏览器是否支持历史 API;这 $location 服务透明地使用最佳可用选项。

在旧版浏览器中打开常规 URL -> 重定向到 hashbang URL 在现代浏览器中打开 hashbang URL -> 重写为常规 URL 注意,在这种模式下,AngularJS 会拦截所有链接(以 下面的“Html链接重写”规则)并以某种方式更新url 永远不会执行完整的页面重新加载。

【讨论】:

【参考方案2】:

可以在 Angular 版本 > 1.6.x 中观察到这种变化。在以前的版本中,它就像只是 # (hash bang)。 只需要#这样的方式获取url,就可以这样写,

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 URL 的哈希前缀已从空字符串“”更改为 bang“!”。如果您的应用程序不使用HTML5 mode 或在不支持HTML5 mode 的浏览器上运行,并且您没有指定自己的哈希前缀,那么客户端 URL 现在将包含“!”字首。例如,而不是 mydomain.com/#/a/b/c 将变为 mydomain.com/#!/a/b/c。

【讨论】:

以上是关于AngularJS SPA路由获取URL为“/#!”而不是“#”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 路由

AngularJS 路由精分

AngularJS:路由

AngularJS学习篇(二十三)

Angular JS 学习之路由

Angular JS中的路由