如何在Angular应用启动之间保留带有引用的JS对象?

问题描述 投票:0回答:1

我需要在Angular应用中序列化状态,并在下次启动该应用时加载它。

问题是

状态包含引用应保存的其他对象的对象,但是如果尝试使用JSON.stringify()对其进行序列化,则到处都会出现循环对象引用错误。最终,我还应该有一种与其他用户共享应用程序状态的方法,例如通过url链接。

我如何解决这些问题以及如何在不丢失数据的情况下序列化引用?

提前感谢!

javascript json angular object
1个回答
0
投票

我唯一能想到的方法,除了使用IndexedDB之外,还很冗长。可能会有更好的解决方案,但这就是我的想法:

持续状态

  1. 使用参考ID展开您的对象结构。就像在HATEOSJSON:API中一样。

一个非常基本的例子是:

原始对象结构

{
    name: "John",
    kids: [
        { name: "mike" },
        { name: "tracy" }
    ]
}

展平

{
    persons: [
        { id: 1, name: "John", kids: [2,3], parent: null },
        { id: 2, name: "mike", kids: [], parent: 1 },
        { id: 3, name: "tracy", kids: [], parent: 1}
    ]
}

现在没有循环引用

  1. 字符串化并保留拼合的版本。

获取状态

  1. 读取持久数据并执行JSON.parse()
  2. 重新创建原始对象结构

可能有一些工具可以帮助您。尝试遵守HATEOS或JSON:API的工具。

不太理想,但是可以,但是附带很多样板和维护

© www.soinside.com 2019 - 2024. All rights reserved.