2017-05-11 15 views
3

와 ngZone.runOutsideAngular을 사용하면 항상 requestAnimationFrame()이 같은 각 영역의 외부를 호출해야하는 것이 좋습니다 ...는 Anguar 2, 나는 각 팀 온라인 읽은 것과는 requestAnimationFrame 루프

this.ngZone.runOutsideAngular(() => { 
    requestAnimationFrame(timestamp => { 
    let timerStart = timestamp; 
    this.myAnimeMethod(timestamp, timerStart); 
    }); 
}); 

myAnimeMethod(timestamp, timerStart) { 
    let time = timestamp || new Date().getTime(); 
    let runtime = time - timerStart; 

    /// animation logic here 

    if(runtime < 10000) { 

    // ------- continue to animate for 10 seconds -- // 

    requestAnimationFrame(timestamp => { 
     this.myAnimeMethod(timestamp, timerStart); 
    }); 
    } 
} 

충분히 첫 번째 요청에 this.ngZone.runOutsideAngular() 전화 또는 내가 이런 myAnimeMethod() 안에 다시 this.ngZone.runOutsideAngular()를 호출해야 그것을 되었습니까?

this.ngZone.runOutsideAngular(() => { 
    requestAnimationFrame(timestamp => { 
    let timerStart = timestamp; 
    this.myAnimeMethod(timestamp, timerStart); 
    }); 
}); 

myAnimeMethod(timestamp, timerStart) { 
    let time = timestamp || new Date().getTime(); 
    let runtime = time - timerStart; 

    /// animation logic here 

    if(runtime < 10000) { 

    // ------- request to run outside of Angular again while continuing to animate for 10 seconds -- // 

    this.ngZone.runOutsideAngular(() => { 
     requestAnimationFrame(timestamp => { 
     this.myAnimeMethod(timestamp, timerStart); 
     }); 
    }); 

    } 
} 

모든 안내에 크게 감사드립니다.

답변

0

짧은 답변 : 각도 외의 통화에서 제공된 requestAnimationFrame 처리기에서 NgZone.runOutsideAngular 번으로 계속 전화 할 필요가 없습니다.

긴 대답 : "루트"영역 (NgZone.runOutsideAngular에 전화 할 때 얻을 수있는 영역)에 들어가면 명시 적으로 다른 영역을 요청하지 않는 한 requestAnimationFrame 콜백도 해당 영역에서 실행됩니다. NgZone.run을 통해

이것을 확인하려면 requestAnimationFrame 처리기에서 정적 함수 NgZone.isInAngularZone()을 호출 해보세요.

나는 Angular 4.4.4와 Zone.js 0.8.18로 이것을 테스트했다.