首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么UI-路由器停止使用散列字符?

为什么UI-路由器停止使用散列字符?
EN

Stack Overflow用户
提问于 2017-02-28 16:54:00
回答 2查看 521关注 0票数 1

我已经开始看到一些关于Angular2的东西,特别是UI-路由器状态和路由。我注意到的是,与Ang1相反,现在我不能使用'#'字符来从一条路线导航到另一条路线。这意味着,如果我转到状态foo (它被路由为/foo ),我必须键入:

mydomain.com/app/foo

而不是原来的mydomain.com/app/#/foo

这显然启动了对服务器中的url /foo的HTTP请求。当然,在Ang1中,响应将是404 (除非我以前创建了一个静态的幽灵页面,例如用于爬虫),但是使用Ang2,我得到了与我所要求的相同的html ( index.html):

mydomain.com/app/

基本上就是“装载.”页面。

我想了解的是,这是如何实现的,如果这与新一代框架提供的服务器端呈现功能相关联的话。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-02-28 17:08:55

因为HTML5客户端路由是可能的,无需使用"#“。

在AngularJS中也可以使用这种HTML5 5模式,但您需要启用它:

代码语言:javascript
复制
$locationprovider.html5Mode(true)  

然而,在角( 2.X.X版及更高版本)中,默认启用HTML5 5模式。

如果你想使用它,你需要注意两件事:

  • 并非所有浏览器都支持这种模式。
  • 服务器需要支持HTML5 5模式

如果您仍然想使用"#",则需要启用它。为此,将以下提供程序添加到根NgModule

代码语言:javascript
复制
{ provide: LocationStrategy, useClass: HashLocationStrategy }  
票数 2
EN

Stack Overflow用户

发布于 2017-02-28 17:11:08

看看HashLocationStrategyuseHash: trueRouterModule.forRoot(routes, { useHash: true })

如果没有散列,则使用pushState

你对每一个优点和缺点的总结都是很好的。当使用pushState (而不是useHash)时,您的服务器必须正确地处理这些路由,但是您的路由看起来更干净。这是一种交换。

为了更具体地了解服务器处理,如果您希望能够对根(如/app/foo)以外的任何路由进行书签并在以后(例如,从刷新或新浏览器或选项卡)返回,则应用这种区别。使用useHash: false (pushState),您的服务器必须进行特殊配置,以映射这些路由,并为这些情况正确地为客户端提供服务。但是,对于useHash: true,不需要这样特殊的服务器端处理;您将只有一个服务器端端点,即根;散列片段完全由浏览器按照web标准处理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42514472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档