IONIC 3中的setInterval

时间:2017-10-14 10:13:54

标签: javascript angular typescript ionic2 ionic3

我想每1秒运行一次功能。搜索后,我找到setInterval,但它对我不起作用。

setInterval(function(){ 
   this.myfuntion();

}, 1000);

我也试过this.myfuntion,但它也不起作用。

5 个答案:

答案 0 :(得分:10)

解决方案是使用 Arrow functions

setInterval(() => { 
   this.myfuntion(); // Now the "this" still references the component
}, 1000);

使用箭头函数时,this属性不会被覆盖,仍会引用组件实例。

答案 1 :(得分:6)

基本上有两种方法可以执行此操作。

尝试使用最符合您要求的observable。

方法1:

import {Observable} from 'Rxjs/rx';
import { Subscription } from "rxjs/Subscription";

// if you want your code to work everytime even though you leave the page
Observable.interval(1000).subscribe(()=>{
    this.functionYouWantToCall();
});

方法2:

// if you want your code to work only for this page
//define this before constructor
observableVar: Subscription;

this.observableVar = Observable.interval(1000).subscribe(()=>{
    this.functionYouWantToCall();
});

ionViewDidLeave(){
   this.observableVar.unsubscribe();
}

答案 2 :(得分:1)

试试这个。我认为这是一个范围问题。没有绑定setInterval中的范围转到窗口对象

      setInterval(function(){ this.myfunction();}.bind(this), 1000);

答案 3 :(得分:1)

对于任何为此感到困惑的人,可以使用 rxjs 中的 interval ,如下所示:

import { interval } from 'rxjs';

interval(1000).subscribe(x => {
  this.myfuntion();
});

答案 4 :(得分:0)

我这样使用它:

import {interval, Subscription} from 'rxjs';

  const source = interval(30000);
        this.subscription = source.subscribe(val => {
          // TODO
        });

您可以在构造函数内部或函数内部使用它,然后从外部调用它。