在angularjs中以模式启用html5模式时会发生什么?

时间:2018-01-09 10:35:36

标签: javascript angularjs html5 single-page-application html5mode

启用html5模式时实际发生了什么?这可能会回到单页应用程序中如何进行路由

我之前看到的(可能是错的):查看angularjs应用程序中的脏URL我总是认为它是不同视图绑定不同片段的url片段。因此,简而言之,我们已经拥有了所有页面,并且正在为特定网址显示特定片段。

现在为了删除哈希,你必须设置html5mode为true,你必须告诉服务器为你的apis以外的每个请求返回索引页面。有点像

app.get('/ap1',some);
//more apis 
*
*
*
//in the end
app.get('*' ,(req,res,next) => req.sendFile('index.html'));

请求是否应该转到服务器并且每次网址更改时都会重新加载页面?

以及html5mode对浏览器的作用是什么?在像react和angular(2或更高版本)这样的新框架中,你甚至不必启用html5mode(在角度2中除外,你必须告诉你想要什么样的网址)。

这是什么巫术?

1 个答案:

答案 0 :(得分:3)

这使用History API

它的设计使开发人员可以:

  • 告诉浏览器“我使用JavaScript来更改页面内容。现在它与您要求/other/page时获得的页面相同”
  • 拦截点击后退转发,以便他们可以使用JS将页面内容更改为与将导航到的网址相同的网址没有拦截后退/前进的点击。

这会更新浏览器历史记录和地址栏中的URL,而不会触发正常导航到新页面。我们的想法是,您可以在页面之间提供更平滑,更快速的转换,同时如果您链接到它们或稍后再回到它们,仍然可以使用真正的URL。

那样:

  • 如果JavaScript因任何原因失败,真正的URL仍然可以传递页面
  • 如果搜索引擎将URL编入索引,则会从中获取实际数据
  • 如果访问者登陆的网站不是主页,他们会立即获取他们要求的内容,而无需等待JavaScript运行,发出额外的Ajax请求,并组装客户端的所有部分。

它的设计是为了回应使用hangbangs而不是真实网址的人。

  

现在为了删除哈希,你必须设置html5mode为true,你必须告诉服务器为你的apis以外的每个请求返回索引页

这是Angular的糟糕建议。

它放弃了历史API可以提供的所有优点,以便具有hashbangs的所有缺点,但具有更好看的URL。

正确地执行它的问题是它需要复制服务器和客户端上的逻辑,这是很多工作。 Isomorphic JavaScript是一种减少这种工作量的方法。

  

以及html5mode对浏览器的作用是什么?

无。 Angular会读取html5mode变量。浏览器不直接关心它。它告诉Angular使用History API而不是hangbang URL。

  

在像react和angular(2或更高版本)这样的新框架中,你甚至不需要启用html5mode(在角度2中除外,你必须告诉你想要什么样的网址。)

默认情况下,他们只使用History API。