网址中的%28和%29的Angular 7更改括号

时间:2019-01-11 11:49:18

标签: javascript angular url escaping

我对角度路线有疑问。在我的应用程序中,我有一个登录会话到期时间。因此,当用户在15分钟内不活跃时-该应用将要求他再次登录。

这时,我将当前的活动URL保存在商店中,并希望在登录后将用户重定向到该URL。我正在使用this.router.navigate([backUrl])来做到这一点。

问题是某些带有括号的路由,例如将此http://localhost:4200/somedata/details/3043/edit/(modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7)转换为http://localhost:4200/somedata/details/3043/edit/%28modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7%29,并且在此页面中路由无法识别。

我尝试使用CustomUrlSerializer来解决此问题:

export class CustomUrlSerializer implements UrlSerializer {
  private defaultUrlSerializer: DefaultUrlSerializer = new DefaultUrlSerializer();

  parse(url: string): UrlTree {
    // Encode parentheses
    url = url.replace(/\(/g, '%28').replace(/\)/g, '%29');
    // Use the default serializer.
    return this.defaultUrlSerializer.parse(url);
  }

  serialize(tree: UrlTree): string {
    return this.defaultUrlSerializer.serialize(tree).replace(/%28/g, '(').replace(/%29/g, ')');
  }
}

并添加到App.module提供者{ provide: RouterStateSerializer, useClass: CustomRouterStateSerializer }, 但是,如果我尝试在新的浏览器窗口中打开它们,或者只是刷新页面,则总是将我重定向到带有括号的URL的NotFound页面。但它仍然适用于相对路线。像从该网址http://localhost:4200/somedata/details/3043/edit一样,我可以通过路径(modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7)

打开我的组件

0 个答案:

没有答案