You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular路由传递对象时出现DataCloneError克隆错误该如何解决?

Angular路由传对象触发DataCloneError的原因及解决方案

报错根本原因

Angular路由的state参数最终会存入浏览器History API的state字段,该字段的内容必须符合结构化克隆算法的序列化要求,以下场景都会触发克隆失败报错:

  • 你当前代码直接将ErrorJsonDTO类本身(本质是构造函数)传入了state,结构化克隆算法不支持序列化函数类型,这是你本次报错的直接原因
  • 就算传入类的实例,如果类包含自定义方法、getter/setter访问器、原型链上存在非可序列化内容,或是对象存在循环引用,也会触发相同错误

修复方案

方案1:传入类的实例而非类本身

先实例化DTO并完成字段赋值,再传递实例对象:

// 实例化DTO并赋值字段
const errorDto = new ErrorJsonDTO();
errorDto.excepcionProducida = true;
errorDto.errorDescripcion = "接口调用失败";
// 其余字段赋值...

// 传递实例
const errorJsonNav: NavigationExtras = {state:{errorJson: errorDto}};
this.router.navigate(['error'], errorJsonNav);

方案2(更稳妥):传递普通字面量对象

避免类原型带来的序列化兼容问题,直接传普通对象,接收侧可以手动转成类实例:

// 传参页
const errorJson = {
  excepcionProducida: true,
  errorDescripcion: "接口调用失败",
  codigoIncidencia: "ERR001",
  // 其余字段...
}
const errorJsonNav: NavigationExtras = {state:{errorJson}};
this.router.navigate(['error'], errorJsonNav);
// 接收页转成DTO实例
const rawError = this.router.getCurrentNavigation()?.extras.state?.['errorJson'];
const errorDto = Object.assign(new ErrorJsonDTO(), rawError);

内容的提问来源于stack exchange,提问作者Pevi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:27:00