问题
在将Angular应用程序更新到版本8(包括Angular CLI)之后,URL不再带有angular.json
文件中提供的基本href前缀,这实际上破坏了我们的应用程序
以前的期望行为
在本地提供法语版本的应用程序时,在localhost:8000
上打开网页会将我重定向到localhost:8000/fr
,并且我可以从该应用程序中导航到的每个URL都将带有前缀{ {1}}。
新的错误行为
在本地提供法文版应用程序时,由于缺少/fr/
,因此在localhost:8000
上打开网页会显示一个空白页面,显示Cannot GET /
。当我立即在/fr
处打开页面时,可以看到登录页面,但是由于我们的登录流程涉及第三方,因此当我从所述第三方返回到我们的应用程序时,我只看到一个空白页面,上面写着{ {1}}(因为缺少localhost:8000/fr
)。
到目前为止,我已经尝试过(不详尽的列表,但是有两种最有希望的方法)
Cannot GET /login
内提供一个/fr/
DI令牌
将APP_BASE_HREF
作为其值并删除的提供商
AppModule
配置中的LOCALE_ID
设置。这个
我从baseHref
重定向到
例如angular.json
,但也会导致意外的重定向
因为我假设路由查找逻辑发生在基本href之前
令牌被注入,因此它无法识别URL并重定向
到默认路由。localhost:8000
配置中提供localhost:8000/fr/
值,无济于事。类似问题
https://github.com/angular/angular-cli/issues/14925基本上是完全相同的问题。不幸的是,所有这些问题都已关闭,而没有提供有关如何还原旧行为的实际解决方案。
答案 0 :(得分:0)
因此,正如我从https://github.com/angular/angular-cli/issues/16179中学到的那样,实际上应该首先避免了旧的行为。
在本地运行该应用程序时,一次只能运行一种语言。假设该应用默认为德语,则运行该应用将在localhost:8000提供服务。运行英语版本时,该应用程序将在localhost:8000 / en上运行。对于Angular CLI 7和8都是如此。版本8的变化仅仅是,在运行英文版并导航到localhost:8000时,它不会自动将您重定向到localhost:8000 / en。因此,对我们而言,这意味着我们仅需稍微调整开发工作流程(只需确保在正确的地址打开应用即可),由于所有语言都是实时的,因此在生产环境中实际上没有任何更改。