为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Angular 应用程序启动之间保持 JS 对象的引用?

如何在 Angular 应用程序启动之间保持 JS 对象的引用?

我需要序列化 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}

    ]

}

现在没有循环引用

  1. 对扁平化版本进行字符串化和持久化。

获取状态

  1. 读取持久化的数据并执行 JSON.parse()

  2. 重新创建原始对象结构

可能有一些工具可以帮助您解决这个问题。尝试遵守 HATEOS 或 JSON:API 的工具。

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


查看完整回答
反对 回复 2022-01-13
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号