Как перезапустить интервал? - PullRequest
0 голосов
/ 22 января 2019

Мне нужно перезапустить интервал, т.е. начать новый интервал в 1 секунду, когда пользователь нажимает кнопку.

home.html

<ion-header>
  <ion-navbar>
    <ion-title>
      TimerDemo
    </ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>

  <h1>{{ time_elapsed }}</h1>
  <button ion-button (click)="restart()">restart</button>

</ion-content>

home.ts

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  timestamp = new Date().getTime();
  timer: any;
  time_elapsed: string;


  constructor(public navCtrl: NavController) {}  

  ionViewDidLoad() {
    this.timer = setInterval(this.function, 1000);
  }

  function = () => {
    let now = new Date().getTime();
    let difference = now - this.timestamp;

    let days = Math.floor(difference / (1000 * 60 * 60 * 24));
    let hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 24));
    let minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
    let seconds = Math.floor((difference % (1000 * 60)) / 1000);

    this.time_elapsed = `${days} d ${hours} h ${minutes} m ${seconds} s`;
  }

  restart() {
    clearInterval(this.timer);
    this.timer = setInterval(this.function, 1000);
  }

}

Я ожидаю, что смогу перезапустить таймер time_elapsed, когда пользователь нажмет кнопку и запустит метод restart().Фактическим результатом было то, что таймер не перезапустился.

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте с этим

ionViewDidLoad() {
  this.timer = setInterval(() => this.setTimeElapsed(), 1000);
}

setTimeElapsed() {
  let now = new Date().getTime();
  let difference = now - this.timestamp;

  let days = Math.floor(difference / (1000 * 60 * 60 * 24));
  let hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 24));
  let minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
  let seconds = Math.floor((difference % (1000 * 60)) / 1000);

  this.time_elapsed = `${days} d ${hours} h ${minutes} m ${seconds} s`;
}

restart() {
  clearInterval(this.timer);
  this.timer = setInterval(() => this.setTimeElapsed(), 1000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...