如何使用 angular2 运行 组件 init 上的间隔仅一次?

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 设为静态。这样所有 class 个实例都可以访问同一个实例。

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);
    }
}