Задать вопрос

Как запустить таймер в pipe Angular2?

Есть пайп котрый показывает разницу времени.

import {Pipe} from "@angular/core";

@Pipe({name: 'ago'})
export class AgoPipe {
  transform(date: Date): string {
    return timeDifference(date);
  }
}

function timeDifference() {...}

timeDifference - функция преобразования, которая выдает, например "20 seconds ago". Но пайп запускается только 1 раз, как сделать чтобы от пересчитывался, например раз в 10 секунд?

Я придумал частичный выход через использование компонента
import { Component, Input } from '@angular/core';
import { Subscription, Observable } from 'rxjs';
@Component({
  selector: 'ago-renderer',
  template: `<span>{{ago}}</span>`,
  styles: [`:host {display: inline}`]
})

export class AgoRendererComponent {

  @Input() time: any;
  timer: Subscription;
  ago: any;

  ngOnInit() {
    this.timer = Observable.interval(5000).subscribe(() => {
      this.ago = timeDifferenceHumanise(this.time);
    });
  }

  ngOnDestroy() {
    this.timer.unsubscribe();
  }
}

Но все же хочется Pipe
  • Вопрос задан
  • 870 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Пропусти это через пайп async. В async передавай Observable.timer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы