我正在使用涉及计时器的Ionic 2构建应用程序。 当计时器启动时,一切都很好,更新是即时的。但是,在Ionic View中,视图更新变得越来越慢。超时设置为32毫秒,但在计时器运行3分钟后,更新大约是秒。我还通过运行它作为Android应用程序进行测试。更新也变得越来越慢,但不像Ionic View那么慢。奇怪的是,当我触摸屏幕时,更新会立即恢复,直到我发布它。
我该如何解决这个问题?
我使用
启动计时器ret
getUpdate函数
this.timer = setInterval(self.getUpdate(self), 32);
在视图中我只是用它来显示时间
getUpdate(self) {
return () => {
self.lapTime = TimerPage.formatTime(new Date().getTime() - self.startTime);
self.cd.markForCheck();
};
}
答案 0 :(得分:1)
目前尚不清楚是什么原因造成了麻烦,没有人在5小时内提出任何建议。
可能的原因:
Angular使用 zone.js 作为change detection
跟踪所有Asynchronous
事件并提供挂钩
和Angular使用这些钩子来查看Re-render
视图。
如果每32ms
Solution:
向Angular的Github帐户提交了一个问题
从setInterval
范围内运行zone.js
,如下所示
import {Component, NgZone} from 'angular2/core';
@Component({})
export class YourClass{
constructor(public zone:NgZone){}
setSetInterval(self){ //just a random, normal function
this.zone.runOutsideAngular(
//anything done here won't trigger a change detection
this.timer = setInterval(self.getUpdate(self), 32);
)
}
getUpdate(self){
this.zone.run(
//to reenter the angular's parent zone and trigger a change detection
//put your functions functionality in here
)
}
}