加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Angular 2单例中制作组件?

发布时间:2020-12-17 18:09:58 所属栏目:安全 来源:网络整理
导读:我正在使用Angular 2来构建我的Web应用程序,其中包含许多组件.我正在使用angular-cli来创建,运行和构建项目. 偶然(或幸运)我偶然发现了一个错误,我意识到我的组件的多个实例正在创建.更糟糕的是当我意识到我的代码是随机引用任何一个这样的实例而没有任何逻
我正在使用Angular 2来构建我的Web应用程序,其中包含许多组件.我正在使用angular-cli来创建,运行和构建项目.
偶然(或幸运)我偶然发现了一个错误,我意识到我的组件的多个实例正在创建.更糟糕的是当我意识到我的代码是随机引用任何一个这样的实例而没有任何逻辑来追溯它.

例如,请检查以下方案:

>我登录了我的应用程序并在特定组件中进行了REST调用(在窗口调整大小事件上)
>这里重要的一点是每个用户都有一个在REST调用中使用的唯一ID
>然后我从该用户注销并使用其他用户登录
>我回到相同的组件并进行了相同的休息调用(再次对窗口调整大小事件),但令我震惊的是,其余一些调用是使用唯一ID或更早登录的用户进行的
>为了检查我的怀疑,我在构造函数中创建了一个第一个类变量,它基本上存储了Date.now()的值.这将转向告诉我何时实例化类.
>然后我添加了一些console.log()语句,这些语句将显示我的变量值调用了哪个实例.
>日志证实了我怀疑多个实例确实同时存在,并且没有任何逻辑或路径可以访问其中任何一个.

This is the image of my log statement. I have blackened out the sensitive parts.

这是我的日志声明的图像.我已经把敏感部分搞砸了.可以清楚地看到,一些休息呼叫正在使用租户1的唯一ID,而一些用于试用租户.从两个实例时间也可以非常清楚地使用两个实例.以前登录的租户的旧实例在某种程度上仍在使用中,我的组件仍然可以访问它.

我的问题是:

>有没有办法让组件类单例化?
>有没有办法在离开组件时销毁组件实例?

解决方法

  1. Is there a way to make the component class singleton?

不是我知道的

  1. Is there any way to destroy the component instance on leaving the component?

是的,有一个接口OnDestroy

export class ClockComponent implements OnDestroy {
interval;

ngOnDestroy() {
  clearInterval(this.interval);
}

constructor() {
  this.interval = setInterval( ()=> console.log('tick') );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读