我需要序列化 Angular 应用程序中的状态并在下次启动应用程序时加载它。问题是:状态包含引用其他应该保存的对象的对象,但是如果我尝试用它序列化它,JSON.stringify()我会在这里和那里得到循环对象引用错误。最终,我还应该有办法与其他用户共享应用程序状态,例如通过 url 链接。我如何解决这些问题以及如何在不丢失数据的情况下序列化引用?提前致谢!
1 回答

牛魔王的故事
TA贡献1830条经验 获得超3个赞
除了使用 IndexedDB 之外,我能想到的唯一方法可能非常冗长。可能有更好的解决方案,但这是我的想法:
持续状态
使用参考 ID 展平您的对象结构。就像在HATEOS或JSON: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}
]
}
现在没有循环引用
对扁平化版本进行字符串化和持久化。
获取状态
读取持久化的数据并执行
JSON.parse()
重新创建原始对象结构
可能有一些工具可以帮助您解决这个问题。尝试遵守 HATEOS 或 JSON:API 的工具。
不理想,但它会工作,但有很多样板和维护
添加回答
举报
0/150
提交
取消