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

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

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

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

Сервис

  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;
}

Компонент управления товарами

@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, работающая с немного другой реализацией, которая принимала переменную, поэтому я действительно в тупике. Любая помощь приветствуется!


person Rusty Shackleford    schedule 01.12.2018    source источник


Ответы (1)


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

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

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

**Console Return** service "X7hFhwDLzFIicl5uUCEX"

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

service X7hFhwDLzFIicl5uUCEX

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

let cur: string = chng.currentValue;

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

person Rusty Shackleford    schedule 02.12.2018