【问题标题】:Angular2 Router URL breaks at &Angular2 路由器 URL 在 & 处中断
【发布时间】:2023-03-11 09:20:02
【问题描述】:

在我更新到最新的 angular v4.3.2 之后,我的所有网址都在 & 值处中断,例如,我有一个路由 /:value 我想从中获取值:

http://localhost:4200/one&two

但它会将我重定向到:

http://localhost:4200/one

而且由于来自 url 的值是动态的,很多人都可以拥有而我无法显示正确的结果。

使用 CustomUrlSerializer 我设法将 %26 替换为 & 并通过应用程序内的路由器进行导航,但仍处于初始页面加载 url 被拆分:

import { UrlSerializer, UrlTree, DefaultUrlSerializer } from '@angular/router';

export class CustomUrlSerializer implements UrlSerializer {

  parse(url: any): UrlTree {
    const dus = new DefaultUrlSerializer();
    return dus.parse(url);
  }

  serialize(tree: UrlTree): any {
    const dus = new DefaultUrlSerializer();
    const path = dus.serialize(tree);
    return path.replace(/%26/g, '&').replace(/%2B/g, '+');
  }

}

有没有办法在 & 处禁用 url 中断?

【问题讨论】:

  • 为什么在 URL 中需要&?它在 URL 中用作特殊字符,IMO 应该保持这种状态。
  • 是的,我知道它是一个分隔参数的特殊字符,我需要它,因为它的值是动态的,并且许多包含特殊字符,如 &,我不希望它被拆分...

标签: angular typescript angular2-routing


【解决方案1】:

好的,我知道 & 在路由器中用作特殊字符,但如果您需要获取该值而不是拆分它:

编辑:node_modules/@angular/router/@angular/router.es5.js

var SEGMENT_RE = /^[^\/()?;=&#]+/;
var QUERY_PARAM_RE =  /^[^=?&#]+/;
var QUERY_PARAM_VALUE_RE = /^[^?&#]+/;

从该正则表达式中删除 & 它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多