26

使用有什么好处和坏处:

  1. PathLocationStrategy - 默认的“HTML 5 pushState”样式。
  2. HashLocationStrategy - “哈希 URL” 样式。

例如,使用HashLocationStrategy将阻止通过其#ID 滚动到元素的功能,但是一些 3rd 方插件需要HashLocationStrategyHashbang #!为了在ajax网站上工作。

我想知道哪一个为 webapp 提供更多。

4

3 回答 3

13

#只能在客户端处理,服务器忽略它们。这可能会导致搜索引擎 (SEO) 出现问题,重定向可能会导致多余的页面重新加载。这个页面https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling有一些详细的解释,而一些论点不适用于 Angular 应用程序(例如 - 不适用于 JS禁用)。

HTML5 pushstate 的“缺点”是需要服务器支持,就像 Thierry 解释的那样。

于 2016-01-29T07:38:33.880 回答
10

对我来说,主要区别在于PathLocationStrategy需要在服务器端配置所有配置@RouteConfig为重定向到 Angular2 应用程序的主 HTML 页面的路径。否则,当您尝试在浏览器中重新加载您的应用程序或尝试使用特定 URL 访问它时,您将遇到一些 404 错误。

这是一个可以为您提供一些提示的问题:

希望它可以帮助你,蒂埃里

于 2016-01-10T08:42:23.627 回答
10

根据官方文档

当路由器导航到一个新的组件视图时,它会使用该视图的 URL 更新浏览器的位置和历史记录。这是一个严格的本地 URL。浏览器不应将此 URL 发送到服务器,也不应重新加载页面。

路径定位策略

现代 HTML5 浏览器支持history.pushState,一种在不触发服务器页面请求的情况下更改浏览器位置和历史记录的技术。路由器可以组成一个“自然”的 URL,该 URL 与需要页面加载的 URL 没有区别。

这是路由到组件的HTML5 pushState样式 URL:xyzlocalhost:4200/xyz/

HashLocationStrategy

旧版浏览器会在位置 URL 更改时向服务器发送页面请求,除非更改发生在 a #(称为hash)之后。路由器可以通过将应用程序内的路由 URL 与散列组合来利用此异常。

这是路由到组件的哈希样式 URL:xyzlocalhost:4200/src/#/xyz/

我想知道哪一个为 webapp 提供更多。

几乎所有 Angular 项目都应该使用默认的 HTML5 样式:

  1. 它生成的 URL 更易于用户理解。
  2. 它保留了稍后进行服务器端渲染的选项。

在服务器上渲染关键页面是一种技术,可以极大地提高应用程序首次加载时的感知响应能力。原本需要十秒或更长时间才能启动的应用程序可以在服务器上呈现并在不到一秒的时间内交付到用户的设备。

仅当应用程序 URL 看起来像中间没有哈希 (#) 的普通 Web URL 时,此选项才可用。

除非您有令人信服的理由诉诸哈希路由,否则请坚持使用默认值。

于 2019-10-13T10:15:08.833 回答