【发布时间】:2020-02-02 01:35:54
【问题描述】:
简而言之我的问题:
为什么散列模式下的角度路由器会将 url 路径的基础更改为我为基础 href 设置的内容?以及如何防止这种行为?
有关我的用例的更多详细信息...
我在 Angular 8 应用程序中使用哈希路由。
在我的 index.html 页面(这是在服务器上生成的 MVC 页面)中,我必须指定一个基本 href,以便我的 html 页面知道在哪里加载由 angular-cli 构建生成的所有 js 和 css 文件.加载 Angular 应用程序后,地址栏中 url 中的基本路径更改为我在 index.html 中指定的基本 href。当我尝试重新加载页面时,这会导致问题,因为 url 不再指向我第一次加载应用程序时请求的原始 url。
我的问题是:如何关闭这种行为或防止 Angular 像这样更改 url?如果我使用哈希路由,我觉得 Angular 不应该关心哈希之前的 url 中的任何内容。我搜索了 Angular 代码库,但找不到原因。
(这不是我看到的默认浏览器行为。就其本身而言,当您加载一个指定了基本 href 的简单 html 文件时,浏览器不会更改您最初请求的 url。我对此进行测试只是为了确保我没有发疯)。
我可以通过提供自己的LocationStrategy 来实施解决方法。我这样做没有任何问题,但我觉得我不应该采取额外的步骤来维护默认的浏览器行为,而 Angular 无论如何都不应该关心。作为一种解决方法,我还可以在构建应用程序时删除基本 href 并提供 --deploy-url ,但这又是一个额外的步骤,当浏览器可以自行正确加载文件并且不会弄乱网址。
我使用一个基本示例创建了this repo,该示例重现了问题并提供了更多细节。我知道快递服务器可能没有“正确”配置。它只是为了说明我必须如何处理我的用例中的文件。请关注文章开头所述的角度问题,而不是辅助细节。
更新
我打开了一个 Angular 问题,因为这似乎是 Angular 代码库中某处的缺陷。 https://github.com/angular/angular/issues/33000.
【问题讨论】:
-
在移除 index.html 中的基本 href 并将其替换为模块中的 APP_BASE_HREF 时,我遇到了类似的问题。当你这样做时,Angular 8 工作得很好,直到用户更改浏览器 url 中的路由器参数并刷新,然后 Angular 路由器服务突然将基本 url 路径解析为当前浏览器 url,并且 js 文件的所有脚本路径再次中断。孩子们如何重写服务器路径并尝试使用基本 href 来解析 javascript 引用,这让我大吃一惊。哈哈。他们需要停止使用我们 20 年前停止使用的旧的断路系统!
标签: angular