Angular zone.PostTask和zone.beforeTask挂钩方法不起作用
我试图实现simpleAngular zone.PostTask和zone.beforeTask挂钩方法不起作用,angular,zone,Angular,Zone,我试图实现simplezone.postertask和beforeTask钩子,但尽管代码没有抛出任何错误,但这些方法永远不会被调用 我搜索了Zone,除了示例中使用的方法外,在源代码中找不到对这些方法的任何引用。确实使用了postertask和beforeTask,但我设置了一个调试器,发现这些方法在它们的示例中也从未被调用过 看起来这些方法已经被弃用了,如果不知道我做错了什么,请告诉我 这是我的密码- import { Component } from 'angular2/core'; @
zone.postertask
和beforeTask
钩子,但尽管代码没有抛出任何错误,但这些方法永远不会被调用
我搜索了Zone,除了示例中使用的方法外,在源代码中找不到对这些方法的任何引用。确实使用了postertask
和beforeTask
,但我设置了一个调试器,发现这些方法在它们的示例中也从未被调用过
看起来这些方法已经被弃用了,如果不知道我做错了什么,请告诉我
这是我的密码-
import { Component } from 'angular2/core';
@Component({
template: `
<div>
<p>Basic use of Zone</p>
<button (click)="startTask()">Start Task</button>
<p> Time taken {{timeTaken}}</p>
</div>
`
})
export class HelloZone {
timeTaken: any;
task1(){
for (let i = 0; i < 1e5; i++);
}
startTask() {
let startTime;
let myZone = Zone.parent.fork({
beforeTask: function() {
startTime = new Date();
},
afterTask: function() {
this.timeTaken = new Date() - startTime;
}
});
myZone.run(function(){
this.task1();
setTimeout(this.task1, 2000);
this.task1();
}.bind(this));
}
}
从'angular2/core'导入{Component};
@组成部分({
模板:`
分区的基本用途
启动任务
所用时间{{timetake}}
`
})
出口级臭氧{
所用时间:任何;
任务1(){
for(设i=0;i<1e5;i++);
}
startTask(){
让我们开始吧;
让myZone=Zone.parent.fork({
beforeTask:function(){
开始时间=新日期();
},
后任务:函数(){
this.timetake=new Date()-startTime;
}
});
myZone.run(函数(){
这是task1();
setTimeout(this.task12000);
这是task1();
}.约束(这个);
}
}
我认为对于您的用例,您可以利用onInvokeTask
和onHasTask
钩子,如下所述:
export class HelloZone {
timeTaken: any;
constructor(private zone:NgZone) {
}
(...)
startTask() {
let startTime;
let myZone = Zone.current.fork({
onInvokeTask: (parent, current, target, task) => {
startTime = new Date();
parent.invokeTask(target, task);
},
onHasTask: (parent, current, target, hasTask) => {
if (!hasTask.macroTask) {
this.zone.run(() => {
this.timeTaken = new Date() - startTime;
});
}
}
});
myZone.run(() => {
this.task1();
setTimeout(this.task1, 2000);
this.task1();
});
}
}
请参阅以下链接:。我认为对于您的用例,您可以利用
onInvokeTask
和onHasTask
钩子,如下所述:
export class HelloZone {
timeTaken: any;
constructor(private zone:NgZone) {
}
(...)
startTask() {
let startTime;
let myZone = Zone.current.fork({
onInvokeTask: (parent, current, target, task) => {
startTime = new Date();
parent.invokeTask(target, task);
},
onHasTask: (parent, current, target, hasTask) => {
if (!hasTask.macroTask) {
this.zone.run(() => {
this.timeTaken = new Date() - startTime;
});
}
}
});
myZone.run(() => {
this.task1();
setTimeout(this.task1, 2000);
this.task1();
});
}
}
请看这篇文章:.部分回答了我的问题。它们不工作的主要原因是在v0.5之后,这些API被弃用,这部分回答了我的问题。它们不工作的主要原因是在v0.5之后,这些API被弃用