繁体   English   中英

如何使用angular2在组件初始化上运行一次间隔?

[英]How to run an interval on component init only once with angular2?

我在组件中启动了一个间隔:

export class FoobarComponent implements OnInit {

    ngOnInit(): void {
        this.startInterval();
    }

    startInterval() void {
        setInterval(() => { console.log('Hi'); }, 1000);
    }    
}

每次调用该组件时,除了先前的间隔外,还会创建一个新的间隔。

我试图使用一个ID(就像我以前使用纯JS一样):

export class FoobarComponent implements OnInit {

    intervalId: Number;

    ngOnInit(): void {
        this.startInterval();
    }

    startInterval() void {
        if(this.intervalId) { // always undefined 
            window.clearInterval(this.intervalId);
        }
        this.intervalId = window.setInterval(() => { console.log('Hi'); }, 1000);
    }
}

但这是行不通的,因为每次调用该组件时都未定义intervalId 因此,在创建新间隔之前,先前的间隔将继续运行。

我不知道如何停止已经运行的间隔。 你能帮我做吗?

您可以将intervalID设为静态。 这样,所有类实例都将能够访问同一实例。

export class FoobarComponent implements OnInit {

    static intervalId: Number;

    ngOnInit(): void {
        this.startInterval();
    }

    startInterval() void {
        if(FoobarComponent.intervalId) { // always undefined 
            window.clearInterval(this.intervalId);
        }
        FoobarComponent.intervalId = window.setInterval(() => { console.log('Hi'); }, 1000);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM