从外部类

时间:2016-11-03 09:39:45

标签: angular zonejs

上下文

我正在开始一个学生项目,这是angular2的度量工具。

我实际上正在研究概念验证,证明我可以在运行时仅使用静态寄存器方法myLibClass.registerComponents([Component1, Component2,...])来获取组件上的度量标准,该方法将具有类似于此的实现(伪代码) :

registerComponents(components:any[]):void{
    components.forEach(component => {
        //Register metric methods on zone foreTask and afterTask
    });
}

问题

如何获得angular2的全球区域?我想在ng2区域绑定我的方法,以便能够检查每个调用的执行时间,NgZone不提供执行此类操作的工具。

我们也欢迎从外部类来衡量组件的另一个想法

UPDATE:

我做了一些研究,并找到了如何使用Zone.current来获取全局angular2区域。

问题仍然存在,因为它的第二部分(最难的部分)尚未实现:

  

我想在ng2区域绑定我的方法,以便能够检查每个调用的执行时间,而NgZone不提供执行此类操作的工具。

这样做的唯一方法是分叉angular2区域并用我的分叉替换angular使用的实际区域(这是我看到的唯一方法)。

甚至可能吗?分区是不成问题的,但我无法在angular2上连接它。

由于我需要比null更多的信息(正如您在the source code of ngZone上看到的那样),所有触发的事件都是使用null触发的,这不允许我获取所需的信息关于最后一个微调任务,如呼叫名称或呼叫者),我需要有一个自定义区域,由angular2使用,但我不能扩展NgZone,因为它不使用DI进行实例化,因此angular2使用的区域仍然是NgZone。

1 个答案:

答案 0 :(得分:1)

如果您想要使用覆盖的ngZone运行应用程序,您可以执行以下操作。

const platform = platformBrowserDynamic();
const zone = new MyZone();
platform['_bootstrapModuleWithZone'](AppModule, [], zone);

它在ng1升级适配器中使用

但不幸的是它是私人方法

另见