2017-11-14 1 views
0

카운트 다운이 완료되면 API 데이터를 업데이트하는 타이머를 설정하고 API 데이터가 업데이트되면 원래의 카운트 다운으로 되돌아갑니다.각도 4 | 타이머를 설정하고 API 데이터를 업데이트하려면 어떻게해야합니까?

예 10까지 카운트하고 싶으면 API 데이터가 업데이트됩니다.

다음은 타이머가있는 코드입니다.

import { Component, ViewEncapsulation, Pipe, PipeTransform, VERSION } from '@angular/core'; 
import { Http, Response, RequestOptions, Headers } from '@angular/http'; 
import { SlicePipe, DatePipe } from '@angular/common'; 
import {Observable} from 'rxjs/Observable' 
import 'rxjs/add/observable/timer' 
import 'rxjs/add/operator/map' 
import 'rxjs/add/operator/take' 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'], 
    encapsulation: ViewEncapsulation.None, 
}) 

export class AppComponent{ 

public data: any; 
countDown; 
counter = 10; 

constructor(private http: Http) { 
    this.countDown = Observable.timer(0,1000) 
    .take(this.counter) 
    .map(() => --this.counter); 
} 

ngOnInit() { 
    this.getVoicepicData(); 
    this.getData(); 
    console.log('hi'); 
} 

getData(){ 
    let headers = new Headers({ 
     'token': "MY TOKEN GOES HERE", 
     'Content-Type': 'application/json' 
    }); 

    let options: RequestOptions = new RequestOptions({ headers: headers }); 

    return this.http.get('http://my.apidatahere.com/api/', options) 
     .map((res: Response) => res.json()) 
} 

getVoicepicData() { 
    this.getData().subscribe(data => { 
     this.data = data 
    }) 
} 
} 
+0

현재 코드의 문제점은 무엇입니까? –

+0

theres 현재 코드와 아무런 문제가 있지만 카운트 다운 0 때 API 데이터를 업데이트 할 때 다시 시작될 때 API 데이터를 업데이트하려면 내 타이머 메서드를 구현하는 방법을 모릅니다. –

답변

0

당신은 간격 n 초에서 어떤 기능을 트리거하기 위해 자바 스크립트의 간격 방법을 설정할 수 있습니다 당신은 명확 간격으로 타이머를 중지 할 수 있습니다.

타이머를 중지 할 때마다 아래 행을 호출하십시오. 위해 clearInterval 전화를 놓친 경우, API는

clearInterval(this.apiTimer); 
+0

감사합니다. API 데이터를 60 초마다 새로 고침하고 싶습니다. 나는 당신의 코드를 사용하지만 그것이 나를 위해 일하지 않는다. –

+0

은 setInterval이 밀리 초 단위로 시간을 허용하기 때문에 타이머를 6000으로 변경합니다. setinterval 함수 안에 콘솔을 넣고 확인하십시오. –

+0

이 하나? Observable.timer (0,1000) 또는 카운터 = 10; ? 그것은 1 밀리 초마다 내 데이터를 업데이트하는 것 같습니다. –

0

당신이 좋아 할 수있는 모든 n 초 후 지속적으로 트리거됩니다

여기
alive = true; 

constructor(private appTest : AppTestService) { 

    // start calling your api every 10 secs 
    Observable.timer(0,10000) 
    .takeWhile(() => this.alive) // only fires when component is alive 
    .subscribe(() => { 
     this.appTest.getData().subscribe(data=> { 
      console.log(data); 
     }) 
    }); 

} 

ngOnDestroy(){ 
    this.alive = false; // switches your Observable off 
} 

가 그 작업 데모입니다, 보라하시기 바랍니다

https://stackblitz.com/edit/angular-interval-observable

+0

이것은 깨끗하고 간단하게 작동합니다. 내 앱이 완전히 작동하기 전에 마지막으로 한 가지. 내 타이머로 어떻게 비동기 수 있습니까? 내가 10 초마다 똑같은 시계를 똑딱 거리고 있다고 말하면 돼? 내 API 데이터를 업데이트하기 위해 내 카운트 다운 타이머를 비동기로합니까? –

+0

@ JydonMah, 그래서 못 봤어? –

+0

그것은 나와 함께 잘 작동하지만 가시성을 위해 내 타이머를 코드와 동기화하려고합니다. 내 타이머의 실시간 틱을 볼 수 있도록 시각적 인 카운트 다운을 원합니다. 아픈 내 인터페이스의 스크린 샷을 추가하십시오. –

관련 문제