我有一个Angular2组件,它有一个自定义的第三方JQuery插件(我们必须使用并且不能更改),它在OnInit事件中初始化。然而,这个第三方库使用了setIntervals。如果我远离视图导航,则间隔仍然处于活动状态,而在其他视图中,它们会一直触发小部件行为。是否可以清除在NGZone中设置的所有间隔?
第三方组件无法销毁它或清除间隔(这不是很好)。我曾希望在Angular2 OnDestroy方法中调用destroy()或类似方法。
我以为我应该可以使用Zone来清理。我做了以下内容:
constructor(elementRef: ElementRef, public zone: NgZone) {
}
ngOnInit() {
this.zone.runOutsideAngular(() => {
$(this.elementRef).3rdPartyWidgetStart();
});}
ngOnDestroy() {
var componentzone=this.zone;
//So do something here to clear intervals set within Zone???
}
我以为它会清除我离开时的间隔。但是,似乎并非如此。我也试过run
而不是runOutsideAngular
,它似乎没有帮助。然后我认为Zone应该知道已经设置好的所有间隔,我可以通过它清除它们。它似乎知道他们但似乎不可能访问列表并清除?任何想法使用Angular 2 RC - 或者如果我只是做了一些完全错误的区域让我知道。这是我的全部新
当jQuery组件在Angular之外使用时,这将如何完成? –
@GünterZöchbauer - 当我检查NGZone时,它似乎意识到已经设置的区间?我的理解是NGZone拦截了所有对SetInterval,SetTimout,Alert等的调用。这个帖子在github https://github.com/angular/zone.js/issues/211这个帖子中似乎暗示了它是可能的,但我没有了解如何。 NGZone似乎没有暴露出去改变SetInterval等 – GraemeMiller