【问题标题】:Clone error when passing an object in the route of angular在角度路径中传递对象时克隆错误
【发布时间】:2021-10-20 06:59:42
【问题描述】:

我正在尝试在我的 Angular 项目中传递对象,而不是单独的字段。但我收到“错误:未捕获(承诺):DataCloneError:无法克隆对象。” :(

这是代码:

 var errorJsonNav: NavigationExtras = {state:{errorJson:ErrorJsonDTO}};
 this.router.navigate(['error'], errorJsonNav);

这是 DTO:

export class ErrorJsonDTO {
  excepcionProducida: boolean;
  errorDescripcion: string;
  codigoIncidencia: string;
  correcto: boolean;
  falloSistema:boolean;
  horaActual: string;
  mensajeBase: string;

}

这是示例的数据:

字段非常简单,一些字符串和一些布尔值。为什么我有克隆问题? :(

问候

【问题讨论】:

  • 您正在尝试导出“类”?

标签: angular routes navigation clone


【解决方案1】:

感谢 ritesh 的指导,我提出了解决方案。

组件发送者必须这样编码:

var errorJsonNav: NavigationExtras = {state:{errorJson:errorJson}};
this.router.navigate(['error'], errorJsonNav);

所以第一行的错误是在状态部分。状态必须具有键值格式。不需要指明我要发送的对象的类型。

在组件接收好原代码:

var navigation = this.router.getCurrentNavigation();
var state = navigation?.extras.state as {errorJson:ErrorJsonDTO};
this.errorJson = state.errorJson;

【讨论】:

    【解决方案2】:

    您没有将有效值传递给状态:

    {state:{errorJson:ErrorJsonDTO}};
    

    ErrorJsonDTO 是一个类型,你需要传递一个ErrorJsonDTO 类型的值

    如果 errorJson 是 ErrorJsonDTO 类型的有效值,请尝试此操作

     this.router.navigate(['error'], state: { errorJson });
    

    【讨论】:

    • 是的,它的作品,我写的解决方案。你写的最后一行让我很困惑,因为你放的是我要发送的数据,而不是导航附加信息。谢谢!
    • 是的,最后一行是简写,所以 {name: name} 与 es6 中的 {name} 相同。如果有帮助,请投票/接受答案:)。干杯。
    • 查看此链接以进一步了解:ui.dev/shorthand-properties/….
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2010-09-09
    相关资源
    最近更新 更多