angular - 我正在尝试在 Typescript 中创建一个简单的计时器,在浏览器控制台中显示“this.pad 不是函数”,但我不明白为什么
问题描述
我很清楚这对 Angular 不是很友好,事实上,我想从你那里知道一个更好的修复方法,如果可能的话,让它更“Angular-y”,谢谢。
export class TimerComponent implements OnInit {
min = 0;
sec = 0;
minutesLabel: any = document.getElementById('minutes');
secondsLabel: any = document.getElementById('seconds');
startTimer() {
const interval = setInterval(this.setTime, 1000);
return interval;
}
setTime() {
++this.sec;
var r: any = this.sec / 60;
this.secondsLabel.innerHTML = this.pad(this.sec % 60);
this.minutesLabel.innerHTML = this.pad(parseInt(r));
}
pad(val: any) {
var valString = val + '';
if (valString.length < 2) {
return '0' + valString;
} else {
return valString;
}
}
constructor() {}
ngOnInit() {}
}
解决方案
您在这里有一些解决方案:
setInterval(this. setTime.bind(this), 1000);
或者:
setInterval(() => this.setTime(), 1000);
原因是当你传入时setTime
,你的对象实例setTimeout
的this
范围没有被保留。
推荐阅读
- mysql - 如何将语言环境数据库中的更新数据自动同步到云数据库中
- linux - 关于 OpenDaylight 的 VTN 功能
- angular - 关于 Angular 材料中的 Datepicker
- python - 在 Python 中生成通用乘法问题
- spring - Spring Boot 依赖于 Spring 3
- glsl - gl_Position.w 在 Vulkan 中的作用是什么?
- .net - 如何通过 PhantomJS Driver 从网站的 HTML 中提取数据
- reactjs - 如何设置 React 自定义端口,如 3129
- android - Android 通话录音应用程序 - 在通话录音机 AudioSource.VOICE_COMMUNICATION 中不记录双方的通话
- php - WordPress 分页仅在第一页上带有功能帖子