Angular2将变量重置为未定义?

时间:2016-11-13 16:52:53

标签: javascript angular amcharts

我是angular2的新手,刚从他们的网站完成了教程和英雄之旅,现在尝试用angular和amChart做一些事情。

目前我遇到一些不能保留其指定值的变量的问题我不知道问题是什么 - 即使没有amcharts而只是使用一些数字类型变量进行测试,问题就出现了我想我错过了什么,我不知道...

所以这是我的班级:

export class SomeComponent {
    chart: AmCharts.AmChart;
    test: number;

    constructor() {}

    ngOnInit(): void {
        this.test = 5;
        console.log("number: " + this.test);
    }

    ngAfterViewInit(): void {
        console.log("number2: " + this.test);
        this.chart = AmCharts.makeChart([...]);
        setInterval(this.update, 5000);
        console.log("number3: " + this.test); 
    }

    update(): void {
        console.log("number in update:" + this.test);
        [...]
    }
}

这是我的输出:

number: 5
number2: 5
number3: 5
number in update: 5
number in update: undefined

很明显,测试是使用ngOnInit中的值5进行初始化,并将其值保持到ngAfterViewInit。但是,当从SetInterval调用更新时,则测试是"未定义"。

提前感谢您提供任何帮助或有用的链接。 :)

1 个答案:

答案 0 :(得分:2)

通过这种方式传递方法或函数“中断”this.

setInterval(this.update, 5000);

使用.bind()

setInterval(this.update.bind(this), 5000);

或箭头功能

setInterval(() => this.update(), 5000);

解决问题