【发布时间】:2017-01-31 10:02:53
【问题描述】:
我正在使用 Angular 2 来构建我的 Web 应用程序,它有很多组件。我正在使用 angular-cli 来创建、运行和构建项目。
偶然(或幸运地)我偶然发现了一个错误,我意识到正在创建我的组件的多个实例。更糟糕的是,当我意识到我的代码随机引用了任何一个实例时,没有任何逻辑可以追溯它。
例如,检查以下场景:
- 我登录到我的应用程序并在特定组件中进行了 REST 调用(在窗口调整大小事件中)
- 重要的一点是每个用户都有一个唯一的 ID,用于 REST 调用
- 然后我从这个用户注销并用另一个用户登录
- 我返回到相同的组件并进行了相同的休息调用(再次在窗口调整大小事件中),但令我震惊的是,一些休息调用是使用唯一 ID 或更早的登录用户进行的
- 为了检查我的怀疑,我在 构造函数 中创建了一个 first class 变量,它基本上存储了
Date.now()的值。这轮到会告诉我什么时候类被实例化。 - 然后我添加了一些
console.log()语句,它们会告诉我哪个实例被我的变量的值调用。 - 日志证实了我的怀疑,多个实例确实同时存在,并且没有特定的逻辑或路径可以访问它们中的任何一个。
这是我的日志语句的图像。我已经把敏感的部分涂黑了。可以清楚地看到,一些休息呼叫是使用租户 1 的唯一 ID 进行的,而一些是针对试用租户的。同样从两个实例时间来看,两个实例的使用也很清楚。以前登录的租户的旧实例仍在运行,我的组件仍然能够访问它。
我的问题是:
- 有没有办法让组件类成为单例?
- 有没有办法在离开组件时销毁组件实例?
【问题讨论】:
-
唯一id很重要,为什么不把范围策略改成原型呢。
-
@RomanC 你能详细说明一下吗?也许有一个例子或链接?
标签: angular singleton angular2-components