Saya membutuhkan pengatur waktu di Angular 2, yang berdetak setelah interval waktu dan melakukan beberapa tugas (mungkin memanggil beberapa fungsi).
Bagaimana melakukan ini dengan Angular 2?
javascript
angular
kuntal
sumber
sumber
Jawaban:
Selain semua jawaban sebelumnya, saya akan melakukannya dengan menggunakan RxJS Observables
silakan periksa Observable.timer
Berikut ini contoh kode, akan dimulai setelah 2 detik dan kemudian berdetak setiap detik:
Dan ini alat pemecah yang berfungsi
Memperbarui Jika Anda ingin memanggil fungsi yang dideklarasikan di kelas AppComponent, Anda dapat melakukan salah satu hal berikut:
** Dengan asumsi fungsi yang ingin Anda panggil bernama func ,
Masalah dengan pendekatan di atas adalah jika Anda memanggil 'ini' di dalam func, ini akan merujuk ke objek pelanggan alih-alih objek AppComponent yang mungkin bukan yang Anda inginkan.
Namun, dalam pendekatan di bawah ini, Anda membuat ekspresi lambda dan memanggil fungsi func di dalamnya. Dengan cara ini, panggilan ke func masih berada di dalam cakupan AppComponent. Ini adalah cara terbaik untuk melakukannya menurut saya.
periksa plunker ini untuk kode kerja.
sumber
timer
tampaknya digunakansetInterval()
. Namun, Anda dapat meneruskananimationFrame
penjadwal (yang menggunakanrequestAnimationFrame()
) untuk menggunakannya alih-alihasync
penjadwal default . Yang perlu Anda lakukan adalahObservable.timer(*,*,Scheduler.animationFrame)
, diberikanimport {Scheduler} from ‘rxjs’
. Meskipun,timer
tampaknya tidak berhasil. Sepertinya masih digunakansetInterVal()
. Namun, pada observasi jenis lain sepertiObservable.range(0,1000,Scheduler.animationFrame)
,requestAnimationFrame
digunakan secara pasti. kinerja bijaksana, saya tidak bisa menjawab Anda dengan pasti sekarang.Solusi lain adalah dengan menggunakan TimerObservable
TimerObservable adalah subclass dari Observable.
PS: Jangan lupa berhenti berlangganan.
sumber
this.subscription.unsubscribe();
berhenti berlangganan.sumber
Dengan rxjs 6.2.2 dan Angular 6.1.7, saya mendapatkan:
kesalahan. Ini diselesaikan dengan mengganti
Observable.timer
dengantimer
:sumber
Anda cukup menggunakan utilitas setInterval dan menggunakan fungsi panah sebagai callback sehingga
this
akan mengarah ke instance komponen.Misalnya:
Di dalam hook siklus hidup ngOnDestroy Anda, kosongkan intervalnya.
sumber
Saya menghadapi masalah karena saya harus menggunakan pengatur waktu, tetapi saya harus menampilkannya dalam 2 komponen waktu yang sama, layar yang sama. Saya membuat timerObservable dalam sebuah layanan. Saya berlangganan pengatur waktu di kedua komponen, dan apa yang terjadi? Itu tidak akan disinkronkan, karena langganan baru selalu membuat alirannya sendiri.
Apa yang ingin saya katakan, adalah bahwa jika Anda berencana untuk menggunakan satu
.publishReplay(1).refCount()
pengatur waktu di beberapa tempat, selalu diletakkan di ujung Pengamat, karena itu akan menerbitkan aliran yang sama setiap saat.Contoh:
sumber
Menemukan paket npm yang mempermudah ini dengan RxJS sebagai layanan.
https://www.npmjs.com/package/ng2-simple-timer
Anda dapat 'berlangganan' ke pengatur waktu yang ada sehingga Anda tidak membuat banyak penghitung waktu jika Anda menggunakannya berkali-kali dalam komponen yang sama.
sumber
Jika Anda ingin menjalankan metode di ngOnInit, Anda dapat melakukan sesuatu seperti ini:
impor 2 pustaka ini dari RXJS:
Kemudian nyatakan timer dan private subscription, contoh:
Terakhir, jalankan metode saat timer berhenti
Itu saja, Angular 5
sumber
sumber