首页 > 解决方案 > 如何在 Angular 应用程序启动之间保持 JS 对象的引用?

问题描述

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

问题是

状态包含引用其他应该保存的对象的对象,但是如果我尝试用它序列化它,JSON.stringify()我会在这里和那里得到循环对象引用错误。最终,我还应该有办法与其他用户共享应用程序状态,例如通过 url 链接。

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

提前致谢!

标签: javascriptjsonangularobject

解决方案


除了使用 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 的工具。

不理想,但它会工作,但有很多样板和维护


推荐阅读