Javascript angular 4无法推送未定义的数组
我试图为每个间隔推送一个数组,但由于某种原因,我得到一个错误,它可能是Javascript angular 4无法推送未定义的数组,javascript,angular,Javascript,Angular,我试图为每个间隔推送一个数组,但由于某种原因,我得到一个错误,它可能是错误类型错误:如果我使用this.numbers[this.value]=this.value,则无法设置未定义的属性'NaN'或它是core.es5.js:1020错误类型错误:如果我使用this.numbers.push(this.value),则无法读取未定义的属性“push” 这是我的密码 import { Component, OnInit } from '@angular/core'; @Component({
错误类型错误:如果我使用this.numbers[this.value]=this.value,则无法设置未定义的属性'NaN'
或它是core.es5.js:1020错误类型错误:如果我使用this.numbers.push(this.value),则无法读取未定义的属性“push”代码>
这是我的密码
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-game-control',
templateUrl: './game-control.component.html',
styleUrls: ['./game-control.component.css']
})
export class GameControlComponent implements OnInit {
timer = null;
value: number;
interval: number;
numbers = [];
constructor() { }
ngOnInit() {
console.log(this.numbers);
}
onClickStart() {
console.log('timer called');
if (this.timer !== null) {
return;
}
this.timer = setInterval(function() {
this.value += 1;
// console.log(this.numbers[this.value - 1 ]);
// this.numbers[this.value] = this.value;
this.numbers.push(this.value);
console.log(this.numbers);
}, this.interval );
}
onClickStop() {
clearInterval(this.timer);
this.timer = null;
}
}
我的html是
<div class="row">
<div class="col-xs-12 ">
<button type="submit" class="btn btn-success" (click)="onClickStart()">Start</button>
<button type="button" class="btn btn-danger" (click)="onClickStop()">Stop</button>
<button type="button" class="btn btn-primary" >Clear</button>
</div>
</div>
<div class="row">
<div class="col-xs-10">
<hr>
<ul class="list-group">
<a
class="list-group-item"
style="cursor: pointer"
*ngFor="let number of numbers"
>
<app-even [num]="number" ></app-even>
<app-odd [num]="number" ></app-odd>
</a>
</ul>
</div>
</div>
开始
停止
清楚的
但是我认为这并不重要函数(){}
导致这个
不再指向当前的类实例,正如大多数来自其他语言的人所期望的那样,使用箭头函数来获得所需的行为:
this.timer = setInterval(() => {
function(){}
导致此
不再指向当前类实例,正如大多数其他语言所期望的那样,使用箭头函数来获得所需的行为:
this.timer = setInterval(() => {
我可能错了,但如果答案是正确的,说明在语义上是错误的。实际上,setInterval
总是从全局范围运行它的参数,是他用function()
破坏了这个
。这将与arrow函数一起使用,因为它没有适当的此
,总是从上下文中检索它。可以在那里找到一些进一步的阅读:@Kaddath不知道为什么您认为它在语义上是错误的。它与function(){…}.bind(this)
相同。它只是确保函数中的这个指向定义该方法的类实例。@GünterZöchbauer从这个角度看是的,但是你的句子可以用其他方式理解,只是想说清楚(语义上不清楚会更好)@Kaddath我想我现在明白你的意思了。我更新了我的答案。我可能错了,但如果答案是正确的,说明在语义上是错误的。实际上,setInterval
总是从全局范围运行它的参数,是他用function()
破坏了这个
。这将与arrow函数一起使用,因为它没有适当的此
,总是从上下文中检索它。可以在那里找到一些进一步的阅读:@Kaddath不知道为什么您认为它在语义上是错误的。它与function(){…}.bind(this)
相同。它只是确保函数中的这个指向定义该方法的类实例。@GünterZöchbauer从这个角度看是的,但是你的句子可以用其他方式理解,只是想说清楚(语义上不清楚会更好)@Kaddath我想我现在明白你的意思了。我更新了我的答案。