ค้นหาเว็บไซต์

javascript - ทำให้ pipe รีเฟรชตัวเองใน angular


ฉันมีเวลาคงที่จากแบ็กเอนด์และฉันต้องการรีเฟรช pipe ทุก 1 วินาทีเพื่อรับวันที่จากตอนนี้ และนี่คือ pipe ของฉัน

    import { Pipe, PipeTransform } from '@angular/core';
import moment from 'moment';
@Pipe({
  name: 'dateFormat'
})
export class DateFormatPipe implements PipeTransform {

  transform(date: string): string {

    return moment.utc(date, 'X').local().format('DD-MM-YYYY h:mm:ss a');
  }

}

ในกรณีนี้มันแค่แปลงเวลาประทับเป็นรูปแบบนี้ ฉันต้องการให้วันที่อัปเดตอยู่ตลอด ฉันจะทำได้อย่างไร?

คำตอบ #1

คุณควรส่งค่ากลับเป็น observable และใช้ asyncPipe ด้วย

import { Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
import { interval, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Pipe({
  name: 'dateFormat'
})
export class DateFormatPipe implements PipeTransform {

  transform(date: string): Observable<string> {
    return interval(1000).pipe(map(() => { return moment().format('DD-MM-YYYY h:mm:ss a') }));
  }

}

และคุณควรใช้มันแบบนี้: {{ 'param' | dateFormat | async}}

คำตอบ #2

ฉันคิดว่าคุณคงแค่ต้องรีเฟรชเวลาที่ผ่านไปของคุณที่ถูกส่งเข้าไปในท่อทุกวินาที?

ชอบ

currentTime$ = Observable.interval(1000).pipe(map(() => { return new Date() } ))

บทความที่เกี่ยวข้อง