2016-04-26 14 views
0

arbeiten Ich versuche einfach zone.afterTask und beforeTask Haken zu implementieren, aber wenn Code keinen Fehler werfen, werden diese Methoden nicht genannt zu werden.zone.afterTask und zone.beforeTask Hook-Methoden nicht

Ich suchte Zone repo in github, und konnte keine Referenz zu diesen Methoden im Quellcode finden abgesehen von denen, die im Beispiel verwendet wird. counting example verwendet und beforeTask, aber ich habe einen Debugger gesetzt und sah, dass diese Methoden auch in ihrem Beispiel nie aufgerufen werden.

Es sieht so aus, als ob diese Methoden veraltet sind, Wenn nicht bitte lassen Sie mich wissen, was ich falsch mache.

Hier ist mein Code -

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)); 
    } 
} 

Antwort

0

Ich denke, dass für Ihren Anwendungsfall, können Sie onInvokeTask und onHasTask Haken nutzen, wie unten beschrieben:

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(); 
    }); 
    } 
} 

dieses plunkr Siehe: https://plnkr.co/edit/EH8uy66ke1i61QhE9fYi?p=preview.

+0

Das beantwortet teilweise meine Frage. Der Hauptgrund, dass sie nicht funktionieren, ist * nach v0.5 sind diese API's veraltet * – sapy

+0

Ja, tatsächlich ;-) –