【问题标题】:Angular 6 router - replace some of the parameters of the current routeAngular 6 路由器 - 替换当前路由的一些参数
【发布时间】:2018-10-06 20:44:13
【问题描述】:

在我的 Angular 6 解决方案中,网址具有以下结构:

/{language}/{app_section}/{object_id}/{view}?queryparams...

语言选择器组件由应用程序的所有部分共享,并包含在其中一个父路由的模板中,以便它出现在所有子路由中。

当用户选择一种新语言时,该组件应该只替换当前路由的 {language} 段,保持其他所有内容不变,然后导航到新路由。看起来应该很简单,但我似乎找不到简单的方法。有人可以帮忙吗?

【问题讨论】:

标签: angular angular6 angular-routing


【解决方案1】:

是的,这是可能的。阅读当前路线,替换语言并导航到该 URL。

constructor(private _router: Router ) {
}

languageSelected(newLanguage) {
  const newUrl = this._router.url.replace(this.currentlanguage, newLanguage);
  this.router.navigateByUrl(newUrl);
}

我假设this.currentLanguage 包含与URL 中表示的完全相同的当前语言,并且传递给方法的newLanguage 也是URL 所需的确切形式。诸如此类的技术将触发组件刷新并且临时状态将丢失。

【讨论】:

  • 谢谢 Avin- 当然这是一个选项。但是,这与从浏览器读取 url 并摆弄它是一样的,而且这似乎不是正确或优雅的方式。不敢相信角路由器没有提供更好的方法。
  • 这不是一回事,因为如果您从浏览器读取 URL,您将获得整个 URL,而不是适用于 Angular 路由器导航的子 URL,如果您设置浏览器 URL,它会导致整页刷新,而不是 Angular 路由更改。还可以选择使用正则表达式来检查 URL,但这很简单,并且完全符合您的要求,除非这不是您想要的。 en.wikipedia.org/wiki/KISS_principle
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2018-11-19
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多