Necesito un temporizador en Angular 2, que marca después de un intervalo de tiempo y realiza alguna tarea (puede ser llamar a algunas funciones).
¿Cómo hacer esto con Angular 2?
javascript
angular
kuntal
fuente
fuente
Respuestas:
Además de todas las respuestas anteriores, lo haría usando RxJS Observables
por favor revise Observable.timer
Aquí hay un código de muestra, comenzará después de 2 segundos y luego marcará cada segundo:
Y aquí hay un plunker que funciona
Actualizar Si desea llamar a una función declarada en la clase AppComponent, puede realizar una de las siguientes acciones:
** Suponiendo que la función que desea llamar se llama func ,
El problema con el enfoque anterior es que si llama a 'esto' dentro de la función, se referirá al objeto del suscriptor en lugar del objeto AppComponent, que probablemente no sea lo que desea.
Sin embargo, en el siguiente enfoque, crea una expresión lambda y llama a la función func dentro de ella. De esta manera, la llamada a func todavía está dentro del alcance de AppComponent. Esta es la mejor forma de hacerlo en mi opinión.
revise este plunker para ver el código de trabajo.
fuente
timer
parece usarsetInterval()
. Pero, puede pasar elanimationFrame
programador (que usarequestAnimationFrame()
) para usarlo en lugar delasync
programador predeterminado . Todo lo que necesita hacer esObservable.timer(*,*,Scheduler.animationFrame)
, dado.import {Scheduler} from ‘rxjs’
Aunque,timer
no parece funcionar. Todavía parece usarsetInterVal()
. Sin embargo, en otros tipos de observables comoObservable.range(0,1000,Scheduler.animationFrame)
, elrequestAnimationFrame
se usa con seguridad. En cuanto al rendimiento, no puedo responderte con seguridad en este momento.Otra solución es utilizar TimerObservable
TimerObservable es una subclase de Observable.
PD: No te olvides de darte de baja.
fuente
this.subscription.unsubscribe();
suscripción.fuente
Con rxjs 6.2.2 y Angular 6.1.7, obtenía un:
error. Esto se resolvió reemplazando
Observable.timer
contimer
:fuente
Simplemente puede usar la utilidad setInterval y usar la función de flecha como devolución de llamada para que
this
apunte a la instancia del componente.Por ejemplo:
Dentro de su gancho de ciclo de vida ngOnDestroy, borre el intervalo.
fuente
Me enfrenté al problema de que tenía que usar un temporizador, pero tenía que mostrarlos en 2 componentes al mismo tiempo, la misma pantalla. Creé el timerObservable en un servicio. Me suscribí al temporizador en ambos componentes y ¿qué sucedió? No se sincronizará, porque la nueva suscripción siempre crea su propia transmisión.
Lo que me gustaría decir es que si planeas usar un temporizador en varios lugares, colócalo siempre
.publishReplay(1).refCount()
al final del Observador, porque publicará la misma secuencia cada vez.Ejemplo:
fuente
Encontré un paquete npm que lo hace fácil con RxJS como servicio.
https://www.npmjs.com/package/ng2-simple-timer
Puede 'suscribirse' a un temporizador existente para no crear un billón de temporizadores si lo usa muchas veces en el mismo componente.
fuente
Si busca ejecutar un método en ngOnInit, podría hacer algo como esto:
importar estas 2 bibliotecas de RXJS:
Luego declare el temporizador y la suscripción privada, ejemplo:
Por último, pero no menos importante, ejecutar el método cuando el temporizador se detiene
Eso es todo, Angular 5
fuente
fuente