启用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中除外,你必须告诉你想要什么样的网址)。
这是什么巫术?
答案 0 :(得分:3)
这使用History API。
它的设计使开发人员可以:
/other/page
时获得的页面相同”这会更新浏览器历史记录和地址栏中的URL,而不会触发正常导航到新页面。我们的想法是,您可以在页面之间提供更平滑,更快速的转换,同时如果您链接到它们或稍后再回到它们,仍然可以使用真正的URL。
那样:
它的设计是为了回应使用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。