3

问题

将我们的 Angular 应用程序更新到版本 8(包括 Angular CLI)后,URL 不再以文件中提供的基本 href 作为前缀angular.json,这实际上破坏了我们的应用程序

以前的期望行为

在本地提供应用程序的法语版本时,打开网页localhost:8000会将我重定向到localhost:8000/fr,并且我可以从应用程序内导航到的每个 URL 也将以/fr/.

新的错误行为

在本地提供应用程序的法语版本时,打开网页localhost:8000会导致空白页面显示Cannot GET /,因为/fr缺少 。当我立即打开页面时localhost:8000/fr,我可以看到登录页面,但是由于我们的登录流程涉及第三方,当我从所述第三方返回我们的应用程序时,我只看到一个空白页面说Cannot GET /login(因为/fr/缺少) .

到目前为止我尝试过的(非详尽列表,但两种最有希望的方法)

  • 在提供程序中提供一个APP_BASE_HREFDI 令牌,该令牌AppModuleLOCALE_ID用作其值并baseHref从配置中删除设置angular.json。这在“某种程度上”起作用,因为我被重定向localhost:8000到 eg localhost:8000/fr/,但它也会导致不需要的重定向,因为我假设路由查找逻辑发生在注入基本 href 令牌之前,因此它无法识别 URL 并重定向到默认路由。
  • 在配置中提供一个deployUrlangular.json,但无济于事。

类似问题

https://github.com/angular/angular-cli/issues/14925基本上是完全相同的问题。不幸的是,所有此类问题都已关闭,但没有提供有关如何恢复旧行为的实际解决方案。

4

1 回答 1

1

因此,正如我通过https://github.com/angular/angular-cli/issues/16179了解到的那样,实际上原本应该不可能的旧行为。

在本地运行应用程序时,一次只能运行一种语言。假设该应用程序默认是德语,运行它会在 localhost:8000 上运行它。运行英文版时,应用程序将在 localhost:8000/en 上提供服务。Angular CLI 7 和 8 都是如此。版本 8 的变化只是它不会在运行英文版并导航到 localhost:8000 时自动将您重定向到 localhost:8000/en。所以对我们来说,这意味着我们必须稍微调整我们的开发工作流程(只需确保我们在正确的地址打开应用程序),我们的生产环境实际上没有任何变化,因为所有语言都是实时的。

于 2019-12-05T13:25:20.987 回答