我有这个代码:
export class GameControlComponent {
@Output() counterUpdated = new EventEmitter<{counter: number, type: string}>();
@Output() counterStop = new EventEmitter();
counterSet: any;
counterStart: number = 0;
startCount() {
console.log('counter is ' + this.counterStart);
this.counterSet = setInterval(this.updateCount, 1000);
//this.updateCount();
}
updateCount() {
this.counterStart += 1;
console.log('New counter is ' + this.counterStart);
this.counterUpdated.emit({
counter: this.counterStart,
type: (this.counterStart % 2) === 0 ? 'even' : 'odd'
});
}
我在 html 组件中有一个按钮可以听这个:
(click)='startCount()'
。
现在,如果我使用 this.updateCount()
(上面评论过),一切正常,每次我按下按钮时,counterStart
都会在方法 updateCount
中更新。
如果使用this.counterSet = setInterval(this.updateCount, 1000)
,counterStart
中的updateCount
变成NaN
.
为什么?有什么想法吗?
当您以这种方式将
this.updateCount
传递给setInterval
时,this
中的updateCount()
将不会是this
在startCount()
中,而counterStart
将是undefined
。
因为
undefined + 1
是NaN
,它会打印NaN
。
您可以将其更改为
setInterval(this.updateCount.bind(this), 1000)
或setInterval(() => this.updateCount(), 1000)
以将this
传递给updateCount
。