заполните поле в разделе обновления в Angular/Firestore CRUD

# #angular #google-cloud-firestore

Вопрос:

То, о чем я прошу, довольно просто, но я просто не могу разобраться в этом или найти решение для Firestore.

Я специально борюсь с отображением текущей записи поля в форме на основе идентификатора, отправленного в URL. Я также не думаю, что он также правильно получает условие «где».

т. е. Когда вы приходите редактировать запись, я пытаюсь заставить ее отображать значение «домен» в поле для редактирования на основе идентификатора, отправленного в URL.

файл ts:

 form = new FormGroup({
    domain: new FormControl(""),
  });

  constructor(
    private aptService: DomainService,
    private actRoute: ActivatedRoute,
    private router: Router,
    public fb: FormBuilder,
    public authService: AuthenticationService,
    public fireStore: AngularFirestore
  ) {
    this.id = this.actRoute.snapshot.paramMap.get('id');
    const docRef = this.fireStore.collection("qm-domain", (ref) =>
      ref.where("id", "==", this.id)
    );
    docRef.snapshotChanges().subscribe((res) => {
      this.form.setValue(res);
    })
  }
 

html-файл:

 <form [formGroup]="form" (ngSubmit)="updateForm()">
      <ion-item>
        <ion-label position="floating">Domain</ion-label>
        <ion-input formControlName="domain" type="text" required></ion-input>
      </ion-item>
      <ion-row>
        <ion-col>
          <ion-button type="submit" color="primary" shape="full" expand="block">Update Domain</ion-button>
        </ion-col>
      </ion-row>
    </form>
 

Ответ №1:

Я, наконец, понял это.

Для всех, у кого есть такая же проблема, вот что я сделал:

     form = new FormGroup({
    domain: new FormControl(""),
  });

  constructor(
    private aptService: DomainService,
    private actRoute: ActivatedRoute,
    private router: Router,
    public fb: FormBuilder,
    public authService: AuthenticationService,
    public fireStore: AngularFirestore
  ) {
    this.id = this.actRoute.snapshot.paramMap.get("id");
    // get the record based on this.id
    const docRef = this.fireStore
      .collection("qm-domain")
      .doc(this.id)
      .snapshotChanges();
    // put it in the form
    docRef.subscribe((res) => {
      this.form.setValue(res.payload.data());
      console.log(res.payload.data());
    });
  }