Обновление поля внутри firebase firestore c без ручной записи ключа поля для обновления Angular - PullRequest
0 голосов
/ 26 мая 2020

Как я могу обновить do c внутри моего firestore без точной записи в коде поля, которое я хочу обновить, потому что это уже достигается через форму:. Допустим, тег HTML в Angular уже приносит как ключ, так и импорт (тот, который будет обновлен):

HTML Tags
       <form [formGroup]="importNgForm" (submit)="addUniqueImport()">
            <div class="modal-body">
              <div class="form-group">
                <label for="key"></label>
                <input disabled type="text" value='{{incomeSelected}}' name="key" class="form-control" formControlName="key" />
               </div>

              <div class="form-group">
                <label for="import">Add amount</label>
                <input type="number" name="import" class="form-control" formControlName="import" />
               </div>
             </div>

             <div class="modal-footer">
              <button type="submit" class="btn btn-primary">Add</button>
             </div>
......more code

Затем на моем компоненте для этого html:

some imports...

export class UserSheetBalanceComponent implements OnInit {

importNgForm: FormGroup;

 constructor(
    private service: Service,
    private amountBuilder:FormBuilder,
  ) {
    this.importNgForm = this.amountBuilder.group({
      key:new FormControl(),
      import:new FormControl(),
    });
  }

  addUniqueImport() {
    this.service.addingImport(this.importNgForm.value as addImport)
  }

и, наконец, на моем служебном компоненте i просто попробуйте передать параметры, которые приносит форма:

 addingImport(dataToPass: addImport) {

    const path = this.docCreator
      .collection('users')
      .doc(this.userdata.uid)
      .collection('Incomings')
      .doc(this.userdata.uid);=====>Path reaching the doc to update

До объявления пути для доступа к этому документу, где находится поле. Но затем, когда вы попытаетесь сослаться на имя поля, которое я хочу обновить, через форму (dataToPass.key), и при импорте этого поля я делаю ссылку на (dataToPass.import), появляется ошибка.

   path.update({dataToPass.key:dataToPass.import}) ====>doesn't work
   }

Проблема в ключе, скажем, я вместо доступа к моей форме (dataToPass) я пишу напрямую имя поля для обновления (какое-то имя), я действительно работаю

   path.update({some name:dataToPass.import}) ======>does work
   }

, поэтому мне интересно, как я могу получить доступ к этому ключу поля, не записывая его точно, но динамически, чтобы обновить мой импорт, когда поле в запросе совпадет. Заранее спасибо !!!!

1 Ответ

2 голосов
/ 26 мая 2020

если у вас есть ссылка на объект в firebase

const path = this.docCreator
  .collection('users')
  .doc(this.userdata.uid)
  .collection('Incomings')
  .doc(this.userdata.uid);

, вы можете создать пустой объект и использовать имя ключа из dataToPass.key, чтобы установить свойство

let foo: any = {};
foo[`${dataToPass.key}`] = dataToPass.import;
path.update(foo);
...