如何在组件上更改属性时更新浏览器URL?

时间:2018-02-06 15:58:45

标签: angular

如果我浏览http:\\localhost:4300\fr,我的主页会加载法语翻译。

我的导航中有2个链接(主页,联系我们)。

主页指向http:\\localhost:4300\fr\home 联系我们指向http:\\localhost:4300\fr\contact

我还有一个下拉列表,用户可以在其中选择一种语言,它将返回翻译的页面。

例如,当我选择西班牙语时,链接会更新为:

http:\\localhost:4300\es\homehttp:\\localhost:4300\es\contact,但浏览器网址仍为http:\\localhost:4300\fr

如何更新浏览器网址?

以下是用户从下拉列表中选择语言时使用的代码:

  translate(langCode, language) {
    const hostName = document.location.hostname.replace('www.', '');

    this.currentTrans = language;
    this.currentTransCode = langCode;
    this._caseService.GetCaseData(caseUrl,  langCode);
  }

this.currentTransCode包含当前语言代码

网址就像http:\\localhost:4300\ + this.currentTransCode

一样构建

2 个答案:

答案 0 :(得分:1)

您可以使用位置对象

//component or service.ts
import {Location} from '@angular/common'

constructor(private location: Location)
{
}

changeCurrentUrl()
{
    let parts = window.location.pathname.split('/');
    parts[1] = this.currentTransCode; //replaces 'fr' with 'en'
    this.changeUrl(parts.join('/'));
}
 changeUrl(url: string)
 {
    this.location.replaceState(url);
 }

答案 1 :(得分:0)

要更改网址,您需要使用正确的语言加载网页。 例如,您可以获取当前路径名,并使用新路径替换该语言,并使用新URL重新加载页面。

document.location.href = "/" + this.currentTransCode + location.pathname.substring(location.pathname.indexOf("/",1)) + location.hash + location.search

UPDATE:

抱歉,我想念你使用Angular。在这种情况下,您可以使用$ location。

$location.path(newUrl);

您可以从此处获取更多详细信息:enter image description here