我有一個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