Angularfire2, проблема получения документов Firestore (с использованием.get, возможно, связанная с ngOnChanges)
Моя структура приложения имеет 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 Компонент
@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, работающая с немного другой реализацией, которая приняла переменную, так что я действительно в замешательстве. Любая помощь очень ценится!
0 ответов
Проблема Как абсолютный новичок, я использую много примеров кода, чтобы заставить вещи работать, а затем пытаюсь выяснить, ПОЧЕМУ это работает и т. Д. В этом примере фрагмент кода, который я нашел, использовал JSON.stringify, чтобы установить значение documentID, Не осознавая последствий, я оставил это.
let cur = JSON.stringify(chng.currentValue);
Чего мне не хватало, так это очень тонкой (для меня) подсказки в консоли.
**Console Return** service "X7hFhwDLzFIicl5uUCEX"
Я думал, что кавычки были просто стандартным обозначением в консоли. До тех пор, пока я не добавил причудливый файл console.log к исходной кнопке в компоненте представления и заметил, что в моем возвращении оттуда не было кавычек:
service X7hFhwDLzFIicl5uUCEX
Все, что потребовалось, чтобы исправить это, было изменить строку stringify на следующую:
let cur: string = chng.currentValue;
В противном случае остальная часть кода, кажется, делает то, что я хочу. Спасибо всем, кто заглянул!