Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular zone.PostTask和zone.beforeTask挂钩方法不起作用_Angular_Zone - Fatal编程技术网

Angular zone.PostTask和zone.beforeTask挂钩方法不起作用

Angular zone.PostTask和zone.beforeTask挂钩方法不起作用,angular,zone,Angular,Zone,我试图实现simplezone.postertask和beforeTask钩子,但尽管代码没有抛出任何错误,但这些方法永远不会被调用 我搜索了Zone,除了示例中使用的方法外,在源代码中找不到对这些方法的任何引用。确实使用了postertask和beforeTask,但我设置了一个调试器,发现这些方法在它们的示例中也从未被调用过 看起来这些方法已经被弃用了,如果不知道我做错了什么,请告诉我 这是我的密码- import { Component } from 'angular2/core'; @

我试图实现simple
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被弃用