【问题标题】:How to count the number of instances for a given class in an Angular app?如何计算 Angular 应用程序中给定类的实例数?
【发布时间】:2018-11-05 10:59:07
【问题描述】:

继续阅读以下有关 Angular 应用程序中的不纯管道和纯管道的链接:

我想亲自查看由 Angular 应用程序创建的实例,但我什至不确定这是否真的可行。不一定是管道,而是任何东西。说组件和其他。

例如,这可以帮助我了解我希望更好地了解在摘要周期中创建实例的时间。

任何用于此目的的调试解决方案/分析器?

【问题讨论】:

  • WebStorm 可以显示所有实例和引用。
  • 管道类针对它们使用的每个表达式进行实例化。

标签: angular typescript debugging profiler instances


【解决方案1】:

我不确定该工具的调试/分析器,因为出于这个原因我从来不需要它,但这可能有助于您理解实例化。

组件、管道和指令在每次使用时都会被实例化。这意味着它们是完全构造的,每个都有单独的生命周期。

服务可以是单例的,也可以是每次使用的实例。您在应用程序中编写的许多服务都是单例的。如果您考虑单例,您可以想象从服务器获取数据的服务,状态管理服务(存储),按需向用户显示一些信息的服务(toastr),语言服务(初始化翻译和切换语言),.. .

关于 Singleton 服务的主题有很多内容需要介绍,所以我建议阅读 https://angular.io/guide/singleton-services

如果您想可视化正在创建的实例,可以通过在构造函数中编写一些简单的日志来轻松完成(构造函数是在创建类的新实例时)。

要在每次构造类时记录类的名称,请将 console.log(this.constructor.name) 添加到要记录的类的构造函数中。

【讨论】:

  • 谢谢,这很有帮助
  • 注意:console.log(this.constructor.name) 在编译到生产环境后将无法工作。您的类将被丑化,因此您将拥有丑化类的名称。可能只有一个字母
【解决方案2】:

是的,可以使用类的每个实例共享或通用的东西来完成。由于服务是在 Angular 应用程序中创建的,以在组件之间共享数据。使用相同的概念:

  • 在服务中放置一个公共变量,比如说 公共计数:number = 0,在文件 SharedService
  • 在类的构造函数中注入这个服务实例,并增加这个变量。 构造函数(私有 sharedServiceInstance:SharedService){ this.sharedServiceInstance.count++; }
  • 获取服务计数变量以了解应用程序初始化后创建的实例数。 console.log(this.sharedServiceInstance.count)

【讨论】:

    【解决方案3】:

    我不确定它是否是您想要实现的解决方案,但有用于调试 Angular 的 Augury。

    augury.angular.io

    总的来说,我觉得它非常有用。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      相关资源
      最近更新 更多