gpt4 book ai didi

javascript - 是否可以清除 NGZone 中设置的所有间隔?

转载 作者:行者123 更新时间:2023-11-28 18:34:57 29 4
gpt4 key购买 nike

我有一个 Angular2 组件,它有一个自定义的第 3 方 JQuery 插件(我们必须使用且无法更改),该插件在 OnInit 事件中初始化。但是,这个第 3 方库充分使用了 setIntervals。如果我离开该 View ,间隔仍然处于事件状态,并且在其他 View 上它们会继续触发小部件行为。

第 3 方组件无法销毁它或清除间隔(这不太好)。我原本希望在 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 ,但它似乎没有帮助。然后我认为区域应该知道所有已设置的间隔,我可以通过它清除它们。它似乎确实知道它们,但似乎不可能访问列表并清除?任何使用 Angular 2 RC 的想法 - 或者如果我只是在区域上做了一些完全错误的事情,请告诉我。这对我来说是全新的

最佳答案

我应该说,你这样做的风险是你自己承担的。直接使用Zone:

    Zone.current.fork({
name: 'jquery', onScheduleTask: (parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone,
task: Task)=>
{
if(task.source === 'setInterval'){
console.log('capture', task);
//data has handleId property, interval id
this.interval = task.data;
}
return parentZoneDelegate.scheduleTask(targetZone, task);
}
}).run(()=>
{
setInterval(()=>
{
console.log('jquery interval', Zone.current);
}, 5000);
});

代码中的某处:

clearInterval(this.interval.handleId);

这段代码很可能缺少一些检查,请阅读文档。我也不确定 Angular 是否可以。

关于javascript - 是否可以清除 NGZone 中设置的所有间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286725/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com