javascript - Làm cho pipe tự làm mới trong angular
Tôi có dấu thời gian tĩnh từ backend và tôi muốn làm mới pipe mỗi 1 giây để lấy ngày từ hiện tại và đây là pipe của tôi
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');
}
}
Trong trường hợp này nó chỉ chuyển đổi dấu thời gian sang định dạng này, tôi muốn giữ cho ngày được cập nhật, tôi có thể làm điều này như thế nào?
Câu trả lời #1
Bạn nên trả về một observable và cũng sử dụng 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') }));
}
}
Và bạn nên sử dụng nó như sau: {{ 'param' | dateFormat | async}}
Câu trả lời #2
Tôi nghĩ bạn chỉ cần làm mới thời gian mà bạn đã truyền vào ống mỗi giây?
Thích
currentTime$ = Observable.interval(1000).pipe(map(() => { return new Date() } ))
