0

使用实时数据库,我使用角度材料 matDatePicker 来保存日期新闻。

由于我已继续使用 firestore 集合,因此当我在角度服务中调用保存的日期时,它会将其显示为对象

  "date": {
     "seconds": 1529445600,
     "nanoseconds": 0
  },

而且我不能将它与 [(ngModel)] 一起使用。看起来它不再是字符串,因此 matDatepicker matInput 不再识别它。

那么我应该如何将 matDatepicker 值绑定到我的视图的 ngModel 中呢?

模板:

    <mat-form-field>
      <input matInput [matDatepicker]="picker" 
        placeholder="Date" required readonly
        [(ngModel)]="news.date"
            (ngModelChange)="updateField(news,'date',news.date)">
      <mat-datepicker-toggle matSuffix type="button" [for]="picker"></mat-datepicker-toggle>
      <mat-datepicker #picker></mat-datepicker>
    </mat-form-field>

服务:

getNewsWithKey(key: string): Observable<SingleNews> {
const newsPath = `news/${key}`;
this.news = this.afs.doc<any>(newsPath)
  .snapshotChanges().map(action => {
    const $key = action.payload.id;
    const data = { $key, ...action.payload.data() }
    return data;
  });
return this.news}
4

1 回答 1

0

看来正在保存的对象是 type firebase.firestore.Timestamp。此更改已添加到Firebase JS SDKv4.13.0中,其中 JavaScriptDate对象将被保存为 type Timestamp

Timestamp该类中,有一个名为 的方法toDate,它将 转换Timestamp为 JavaScriptDate对象。

以下是您可以执行的操作:

  • 您可以尝试使用已转换的临时对象Timestamp和远程保存的任何数据分配一个临时对象。

    getNewsWithKey(key: string): Observable<SingleNews> {
      const newsPath = `news/${key}`;
      this.news = this.afs.doc<any>(newsPath)
        .snapshotChanges().map(action => {
          const $key = action.payload.id;
          const data = Object.assign(action.payload.data(), { date: action.payload.data().date.toDate(), $key: action.payload.id });
          return data;
        });
      return this.news;
    }
    
于 2018-06-16T06:23:08.097 回答