nig*_*010 2 html javascript angularjs single-page-application html5mode
启用 html5 模式时实际上会发生什么?这可能会回到单页应用程序中路由如何发生的问题
我之前的感知(可能是错误的):查看 angularjs 应用程序中的脏 url,我总是假设它是 url 片段,不同的视图绑定到不同的片段。简而言之,我们已经拥有所有页面,并且正在为特定 url 显示特定片段。
现在,为了删除哈希,您必须将 html5mode 设置为 true,并且必须告诉服务器为除 api 之外的每个请求返回索引页面。有点像
app.get('/ap1',some);
//more apis
*
*
*
//in the end
app.get('*' ,(req,res,next) => req.sendFile('index.html'));
Run Code Online (Sandbox Code Playgroud)
每次 url 更改时,请求不应该发送到服务器并重新加载页面吗?
html5mode 对浏览器有什么作用?在像 React 和 Angular(2 或更大)这样的较新框架中,您甚至不必启用 html5mode(除了在 Angular 2 中,您必须告诉您想要哪种 url)。
这是什么巫术?
这使用历史API。
它的设计使开发人员能够:
/other/page”这会更新浏览器历史记录和地址栏中的 URL,而不会触发到新页面的正常导航。这个想法是,您可以在页面之间提供更平滑、更快速的转换,同时仍然拥有可以正常工作的真实 URL(如果您链接到它们或稍后返回它们)。
那样:
它是为了响应人们使用hangbangs而不是真正的URL 而设计的。
现在,为了删除哈希,您必须将 html5mode 设置为 true,并且必须告诉服务器为除 api 之外的每个请求返回索引页
这是来自 Angular 的糟糕建议。
它放弃了历史 API 可以提供的所有好东西,以便拥有 hashbang 的所有缺点,但具有更好看的 URL。
正确执行的问题在于,它需要在服务器和客户端上复制逻辑,这是一项大量的工作。同构 JavaScript是减少这种工作量的一种方法。
html5mode 对浏览器有什么作用?
没有什么。该html5mode变量由 Angular 读取。浏览器不直接关心它。它告诉 Angular 使用 History API 而不是hangbang URL。
在像 React 和 Angular(2 或更大)这样的较新框架中,您甚至不必启用 html5mode(除了在 Angular 2 中,您必须告诉您想要哪种 url)。
他们默认只使用 History API。