【问题标题】:IE9 PathLocationStrategy Angular 4IE9 PathLocationStrategy Angular 4
【发布时间】:2018-02-03 12:11:24
【问题描述】:

我将 IE9 和 PathLocationStrategy 与 Angular4 一起使用,但它似乎不起作用。它只是附加“#”无限时间。我尝试添加 history.js polyfill,但似乎没有任何效果。

谁能帮助我如何在 Angular 4 和 IE9 中使用 PathLocationStrategy?

更新: 我终于想通了,我们不能在 IE9 上使用 PathLocationStrategy。现在我试图弄清楚如何在浏览器的其余部分使用 PathLocationStrategy,并且只有在 IE9 存在时,才切换到 HashLocationStrategy。 我试图在我的模块中包含以下代码行:

RouterModule.forRoot(COMMON_ROUTES, { useHash: !Boolean(history.pushState) }),

我证实,!Boolean(history.pushState) 在 IE9 中返回 true,在其他浏览器中返回 false。但它不起作用。即使在 IE9 中,Angular 也默认为 PathLocationStrategy。有人可以帮忙吗?

【问题讨论】:

  • 为什么不将它添加到 ngmodule 的提供者数组中并尝试{provide: LocationStrategy, useClass: HashLocationStrategy},
  • @RahulSingh - 我想要的是......仅对 IE9 使用 HashLocationStrategy,对于其他浏览器,使用 PathLocationStrategy。以上建议,不足以满足此要求。

标签: angular angular2-routing


【解决方案1】:

原因

旧版浏览器 [non-evergreen] 在位置 URL 更改时向服务器发送页面请求,除非更改发生在“#”之后(称为“哈希”)。路由器可以通过使用哈希组合应用程序内路由 URL 来利用此异常。


解决方案

遗憾的是没有解决方案...

documentation 中所述,HashLocationStrategy 在引导过程中启动。

...如果您愿意,可以在引导过程中切换到 HashLocationStrategy。

这进一步加强了......

您必须选择一种策略,并且需要在项目早期做出正确的决定。一旦应用程序投入生产并且存在大量应用程序 URL 引用,以后更改就不容易了。

即您需要开发内容以使用特定的位置策略,而更改策略意味着您必须在开发过程中更新重要的逻辑和其他路由功能,而不是像您希望的那样事后考虑/在运行时。

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多