开发者问题收集

Angular/Ionic Singleton 在刷新后被破坏

2021-02-16
774

我有一个单例 typescript 类,用于存储用户的登录凭据。我将它们设置在登录页面上,然后使用 Angular Router.navigate 转到下一页。(没有参数),在下一页上我想使用我的单例,它工作正常,但如果我刷新页面,单例未定义? 我该如何解决这个问题?

这是刷新后的错误:

  • core.js:5980 错误错误:未捕获(在承诺中):TypeError:无法读取未定义的属性“socialSecurityNumber”TypeError:无法读取未定义的属性“socialSecurityNumber”

谢谢

2个回答

如果刷新页面(浏览器中按 F5),整个 SPA 将再次引导并再次创建服务。

这意味着,除非存储在存储或 cookie 中,否则服务的新实例将不具有用户数据。

还请检查服务是否“在根目录中”提供,而不是在任何模块提供程序数组中提供,因此没有它的副本。

Dani P.
2021-02-16

大多数情况下,我们会将用户登录详细信息存储在浏览器存储或 cookie 中。

当您实际上要将用户相关详细信息保存在服务类中时,请尝试使用浏览器存储来存储用户相关详细信息。

请在此处查看有关浏览器存储以及如何设置它们的信息。

完成上述实现后,尝试在应用程序组件加载时检查用户凭据,如果没有重定向到登录页面,则按照常规流程进行操作。

P.S: 您需要进行一些设计更改才能实现,例如您确实希望用户继续当前会话,或者需要他重定向登录页面以进行新会话。

Ganesh
2021-02-16