У меня есть две коллекции: «транспортные средства» и «клиенты». В каждом транспортном средстве я регистрирую клиента через идентификатор документа клиента. Мне нужно получить доступ к заголовку клиента с помощью ключа, который я храню в документе транспортного средства, и отобразить его в таблице данных материала, которая показывает список транспортных средств. Тем не менее, я не могу заставить его работать, и я просто поражен этим.
На рисунке ниже показана таблица, в которой мне нужно отобразить заголовок клиента, используя другой документ. Остальные значения извлекаются из собственного документа транспортного средства.
До сих пор у меня были неудачные попытки с switchMap и с flatMap (возможно, из-заотсутствие опыта использования этих операторов). Единственной успешной попыткой было получить заголовок клиента с помощью вложенного наблюдаемого запроса из наблюдаемых «транспортных средств», и он работает крайне плохо. (Названия клиентов исчезают после сортировки таблицы)
Вот как я выбираю наблюдаемые транспортные средства:
this.vehicles$ = this.afs.collection<IVehicle>(`vehicles`);
this.vehicles = this.vehicles$.snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as IVehicle;
const $key = a.payload.doc.id;
return { $key, ...data };
});
})
);
Так я смог выбрать заголовки (неисправности в таблице сортировки). события - названия почему-то исчезают)
this.vehicles = this.vehicles$.snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as IVehicle;
const $key = a.payload.doc.id;
const client = data.client;
const clientTitle = this.afs
.doc(`clients/${client}`)
.snapshotChanges()
.pipe(
map(foo => {
const dataFoo = foo.payload.data() as IClient;
let titleString = dataFoo.title;
if (client) {
return { titleString, ...dataFoo };
} else {
titleString = 'N/A';
return { titleString, ...dataFoo };
}
})
);
return { clientTitle, $key, ...data };
});
})
);
Я, должно быть, что-то делаю не так, пытаясь использовать switchMap, так как не могу получить идентификатор документа из документа транспортного средства, даже если интерфейс транспортного средствавключает в себя поле «клиент». (см. изображение ниже) Вот почему я не заполнил этот фрагмент, чтобы вернуть гранулярные значения для добавления к наблюдаемой «машине».
Я просто не могу понять, что я делаю неправильно, я был бы признателен за любое направление, которое показывает «правильный» подход к этим типам запросов.