Angular 2定期刷新视图

abf*_*rid 0 javascript model-view-controller momentjs angular

我正在使用moment.js .fromNow()显示项目及其相对创建日期的列表,如下所示:

getRelativeDate(date: string): string {
  return moment(date, 'YYYY-MM-DD HH:mm:ss').fromNow();
}
Run Code Online (Sandbox Code Playgroud)
<div class="created">{{getRelativeDate(item.created)}}</div>
Run Code Online (Sandbox Code Playgroud)

这是它的样子:

在此处输入图片说明 但是除非我与项目交互,否则它在初始加载后保持不变,这是有道理的,因为数据没有变化,所以当前时间是不变的。

如何强制刷新这些值?每分钟就足够了。

cga*_*ian 5

没有人惊讶地提到为此创建管道吗?

import { Pipe, PipeTransform } from '@angular/core';

import moment from 'moment';

@Pipe({
  name: 'dateTimeFormat',
  pure: false,
})
export class DateTimeFormatPipe implements PipeTransform {
  transform(date: string, format: string = 'YYYY-MM-DD HH:mm:ss'): string {
    return moment(date, format).fromNow();
  }
}
Run Code Online (Sandbox Code Playgroud)

通过将逻辑卸载到管道中,可以保持组件的清洁。

<ul>
  <li *ngFor="let date of dates">
    {{ date | dateTimeFormat:'YYYY-MM-DD HH:mm:ss'}}
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

最酷的是格式是可选的,可以在整个应用程序中重复使用。

然后定期更新组件以刷新调用setInterval。您还需要调用ChangeDetectorRefdetectChanges根据进行调用ChangeDetectionStrategy。更好的是,完全分离组件。

实时示例 https://stackblitz.com/edit/angular-cli-moment-pipe

有用的矩管集 https://github.com/urish/angular2-moment/