Angularfire2, проблема получения документов Firestore (с использованием .get, возможно, связанная с ngOnChanges) - PullRequest
0 голосов
/ 01 декабря 2018

Моя структура приложения имеет 1 службу и 2 компонента:

Служба: содержит все подключения к пожарному хранилищу. ViewComponent: получает список из службы и отображает его. ItemManagementComponent: отображает форму и позволяет пользователю добавлятьновая запись.

Проблема У меня есть кнопка в ViewComponent, которая (теоретически) отправляет documentID в ManagementComponent, который затем отображает данные этого документа в форме, позволяя пользователюОбновить.Прямо сейчас, когда я нажимаю кнопку, я могу отследить doumentID, и сервис полностью возвращается через мое приложение, но я на самом деле не получаю возвращенный документ.Я могу запустить точно такой же код с проводным documentID, и он прекрасно работает, поэтому, очевидно, я что-то упускаю.

Сервис

  getUpdateInventoryItem(updateId: string) {
    console.log('service', updateId)
    this.updateId = updateId
    console.log('service2', this.inventoryCollectionRef.doc(updateId).ref.get())
    return this.inventoryCollectionRef.doc(updateId).ref.get()
  }

Просмотреть HTML

<td><button type="button" class="btn btn-default" (click)="updateInventory(item.id)">Upd</button></td>
<app-item-management [updateID]="ChildUpdateId"></app-item-management>

Просмотреть компонент

@Output() inventoryUpdate = new EventEmitter();
public ChildUpdateId: string;

updateInventory(updateId: string) {
this.ChildUpdateId = updateId;
}

ItemManagement Component

@Input() updateID;

  ngOnChanges(incomingID: SimpleChanges) {
    if (!incomingID['updateID'].isFirstChange()) {
      for (let ID in incomingID) {
        let chng = incomingID[ID];
        let cur = JSON.stringify(chng.currentValue);
        console.log('current', cur)
        this.updateInventory(cur)
      }
    }
  }

updateInventory(incomingID) {
    console.log('updateFunction',incomingID)
    this.inventoryService.getUpdateInventoryItem(incomingID)
      .then((doc) => {
        if (doc.exists) {
          this.editItem = doc.data();
          this.inventoryForm.patchValue(this.editItem);
          this.update = true;
        } else {
          console.log("No such document!");
        }
      }).catch(function (error) {
        console.log("Error getting document:", error);
      });
  };

Итак,если я нажимаю кнопку обновления в представлении HTML, это то, что мне показывает моя консоль: снимок экрана журнала консоли С моей точки зрения, я вижу идентификатор, переданный службе, и служба имеет правильноответ отформатированного документа на возврат.

Если я скопирую идентификатор документа непосредственно из журнала консоли и перенаправлю его в функцию updateInventory в ItemManagementComponent, а затем вызову аппаратную функцию из NgOnChanges, она работает.Просто так или иначе, когда я передаю этот идентификатор как переменную, он замыкается накоротко.

У меня была та же самая функция updateInventory, работающая с немного другой реализацией, которая приняла переменную, так что я действительно озадачен.Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 02 декабря 2018

Проблема Как новичок, я использую множество примеров кода, чтобы заставить вещи работать, а затем пытаюсь выяснить, ПОЧЕМУ это работало и т. Д. В этом примере фрагмент кода, который я нашел, былиспользуя JSON.stringify, чтобы установить значение documentID.Не осознавая последствий, я оставил это.

let cur = JSON.stringify(chng.currentValue);

Мне не хватало очень тонкой (для меня) подсказки в консоли.

**Console Return** service "X7hFhwDLzFIicl5uUCEX"

Я думал, что кавычкибыли просто стандартные обозначения в консоли.До тех пор, пока по какой-то прихоти я не добавил console.log к исходной кнопке на компоненте представления, и заметил, что в моем возвращении оттуда не было кавычек:

service X7hFhwDLzFIicl5uUCEX

Все, что нужно, чтобы это исправить, былоизмените приведенную выше строку stringify на:

let cur: string = chng.currentValue;

В противном случае остальная часть кода, кажется, выполняет то, что я хочу.Спасибо всем, кто заглянул!

...