Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5模式与哈希模式的优缺点AngularJS_Javascript_Html_Angularjs - Fatal编程技术网

Javascript HTML5模式与哈希模式的优缺点AngularJS

Javascript HTML5模式与哈希模式的优缺点AngularJS,javascript,html,angularjs,Javascript,Html,Angularjs,在AngularJS 1.3中,在HTML5模式下需要标记,这让我思考HTML5模式与哈希模式的优缺点 使用散列模式,缺点是URL有点难看,如果您希望用户自己键入URL,那么URL就不直观。HTML5模式(1.3版)的缺点是需要标记,这会产生很多问题(比如让SVG的使用有点麻烦) 这两种模式还有其他我没有想到的缺点吗?使用历史API可以获得一个真实的URL,该URL可以包含服务器直接提供的适当内容 这: 允许您以正确的状态加载页面,即使用户访问的第一个页面不是主页。(这比在主页状态下加载它,然

在AngularJS 1.3中,在HTML5模式下需要
标记,这让我思考HTML5模式与哈希模式的优缺点

使用散列模式,缺点是URL有点难看,如果您希望用户自己键入URL,那么URL就不直观。HTML5模式(1.3版)的缺点是需要
标记,这会产生很多问题(比如让SVG的使用有点麻烦)


这两种模式还有其他我没有想到的缺点吗?

使用历史API可以获得一个真实的URL,该URL可以包含服务器直接提供的适当内容

这:

  • 允许您以正确的状态加载页面,即使用户访问的第一个页面不是主页。(这比在主页状态下加载它,然后在阅读hashbang后用JS更改它要快)
  • 为搜索引擎提供良好的内容以编制索引(不使用谷歌的可怕(现在已弃用))
  • 允许URL工作,即使JavaScript不可用
另见

hashbang方法:

  • 古代浏览器中的作品
  • 如果不投入精力构建一个服务器端回退,就不要假装有服务器端回退
注意:当您使用History API时,古老的浏览器可能会退回到仅仅跟随服务器生成页面的链接


也就是说,Angular对History API的使用非常糟糕

以下引述自:

使用这种模式需要在服务器端重写URL,基本上您必须重写所有指向应用程序入口点的链接(例如index.html)

这个建议太糟糕了。如果您使用的是history API,那么在编写服务器端代码时应该牢记这一点。通过将每个URL重写为一个HTML文档,而该文档只进行引导,而不做其他任何事情,就可以使服务器处理的不同URL变得毫无意义。您还完全依赖于JS,因为当服务器出现故障时,无法让服务器交付内容

简而言之,这种方法使用历史API纯粹是出于表面原因,然后使用肮脏的黑客来避免404错误

对于支持HTML5历史API的浏览器,$location使用HTML5历史API编写路径和搜索。如果浏览器不支持历史API,$location提供一个Hashbang URL

这是遵循哲学的结果,即历史API的存在是出于表面原因,而非实际原因。Angular没有使用服务器提供的常规页面,而是为每个资源使用两个URL(一个历史API和一个Hashbang)

使用HTML5模式需要在服务器端重写URL,基本上您必须重写所有指向应用程序入口点的链接(例如index.html)。在这种情况下,需要
标记也很重要,因为它允许AngularJS区分url中作为应用程序基础的部分和应用程序应该处理的路径

有关详细信息,请参阅


能帮上忙吗?@Blackhole我曾尝试过,但运气不好,但进一步研究这个问题时,似乎是icogal.js库中的某些东西导致了这个问题,因为当我只使用SVGInjector库和该链接中提到的技术时,图标工作正常。我仍然想知道AngularJS中HTML5模式/散列模式之间的区别(更新我的问题以反映这一点)。在3年的时间里,除了svg之外,我没有注意到HTML5模式在不同网站上的任何问题(有一些渐变路径问题,如您所写,与基础相关,必须指定完整路径)如果JS失败,它应该如何工作?当然,浏览器会加载该URL,但用户会看到什么?没什么,因为如果JS失败,应用程序路由器就不能工作。@Rantiev-这就是“由服务器直接提供适当内容”的意义所在。另见和。你必须指出这一点,因为没有人像往常一样拥有这一套。许多SPA没有任何服务器端,而是从任何API获取信息的静态网站。因此,服务器端URL处理是一种非常特殊的情况。在大多数情况下,如果JS失败,这意味着你的网站失败。@Rantiev-那么你最好使用hashbang并完成它。我认为如果我们谈论的是百分比,那么所有angular应用程序中有1%使用服务器端URL处理,就像这样。99%的用户将使用beauty URL(html5模式)。我增加了一些数字,以帮助你们理解我的观点。实现服务器端渲染是一项相当复杂的任务,很少有人这样做,而将html5模式转换为两行代码。(至少是angular,我本人从未做过这个幻影JS和其他员工)