使用 ion-datetime 值更改更新 Firestore 文档

Posted

技术标签:

【中文标题】使用 ion-datetime 值更改更新 Firestore 文档【英文标题】:Update Firestore document with ion-datetime value change 【发布时间】:2020-02-04 04:19:45 【问题描述】:

在页面中有 ion-datetime 元素,我想在 Firestore 文档中更新它的值。我想使用一个优雅且易于阅读和使用的解决方案,作为它的 html 标记事件。我使用了它的onChange 事件。但是它会在每次页面加载时触发,并且它的值(显然)在重新分配它链接的变量时发生变化,这是由于如果我没有在某处初始化它会引发 unassigned 错误,例如构造函数。

我尝试了其他方法,但我的想法已经不多了。

所以,为了展示我所做的最好的部分,为了让你知道,它是:

<ion-datetime
    display-format="D MMMM YYYY"
    [(ngModel)]="object.date"
    (onChange)="changeDate()">
</ion-datetime>
private docId: string;

constructor(private aRoute: ActivatedRoute, private angularFirestore: AngularFirestore)  

ionViewWillEnter()  this.docId = this.aRoute.snapshot.paramMap.get('id'); 

private changeDate(): void 
    const partial: Partial<Type> = date: this.object.date;
    this.angularFirestore.collection('type').doc<Type>(this.id).update(partial);

【问题讨论】:

【参考方案1】:

在 Ionic 框架中,您需要使用 (ionChange) 而不是 (onChange) 才能使其工作。

但是,您应该避免在用例场景中使用它,因为每次重新加载页面时都会在 object.date 对象中更改值时触发它。基本上,您是在告诉他每次触发事件时都保存该值。因此,可以在以编程方式更改 object.date 的值或当用户通过选择不同的日期来更改它时触发事件。在这两种方式中,每一种都会触发事件并调用函数。

请改用[pickerOptions],因为它在ion-datetime 文档中有所记载。选择日期时可以有自定义按钮。所以更新日期的函数只会在用户点击选项时被调用。

工作示例:

在 HTML 中:

<ion-item>
  <ion-label possition="floating">Choose date:</ion-label>
  <ion-datetime
    display-format="D MMMM YYYY"
    [(ngModel)]="object.date"
    [pickerOptions]="customPickerOptions"> //Replaced this part (ionChange)=""
  </ion-datetime>
</ion-item>

在 TS 中:

  customPickerOptions: any;

  constructor() 

      this.customPickerOptions = 
        buttons: [
          text: 'Save',
          handler: newTime => console.log("Saving date in Firestore ...");
        ]
      

  

但是,handler 有自己的作用域,因此您将无法获得this.object.date 的值,因此请从newTime 获取响应并从那里保存数据。您可以获取日期为newTime.day["text"],月份为newTime.month["text"]等。

【讨论】:

非常感谢。这对我非常有用。我必须说,即使在阅读您的答案之前,我也没有看到官方文档。此外,您的回答很好地解释了它是如何工作的。干杯。

以上是关于使用 ion-datetime 值更改更新 Firestore 文档的主要内容,如果未能解决你的问题,请参考以下文章

ion-datetime:如何获取没有时间戳的日期值?

ion-datetime Ionic 3显示初始值

使用 ion-datetime v4 而不是 v6

Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'

在 ionic ion-datetime 字段中显示未来日期

更新两个值,第二个值具有 where 子句