Я использую @ angular / fire для извлечения данных из магазина.У меня есть два компонента.один - родитель, а другой - ребенок.Оба эти компонента подписываются на наблюдаемые с помощью асинхронных каналов.Это две разные наблюдаемые (но в одной коллекции).Когда я прибываю на дочерний маршрут, я вижу данные из родительского маршрута, пока наблюдаемый дочерний компонент не даст ответ и не заменит данные, которых там быть не должно.Почему это происходит?
Это метод, который возвращает наблюдаемую, которая используется родительским компонентом.
getMyTasks(workspaceID, userID) {
return this.afs.collection('Tasks', ref => ref.where(`workspaceID`, '==', workspaceID).where(`members.${userID}`, '==', true))
.snapshotChanges().pipe(
map(actions => actions.map(a => {
const data = a.payload.doc.data() as Task;
const id = a.payload.doc.id;
let member = data.members;
let isMember = false;
for (var b in Object.keys(data.members)) {
if (Object.keys(member)[b] === userID) {
isMember = true;
break;
} else {
isMember = false;
}
}
let createdBy = data.createdBy;
let creatorName = "";
for (let i = 0; i < this.members.length; i++) {
if (this.members[i].memberId === createdBy) {
creatorName = this.members[i].data.name;
}
}
return { id, creatorName, isMember, ...data };
}))
);
}
this.tasks$ = this.firestoreService.getMyTasks(this.workspaceID, this.userID);
А затем я использую асинхронный канал вшаблон.А вот метод, который используется в дочернем компоненте
getTasks(projectId, members) {
return this.afs.collection('Tasks', ref => ref.where('projectId', '==', projectId).orderBy("createdAt", "desc"))
.snapshotChanges().pipe(map(actions => actions.map(a => {
const data = a.payload.doc.data() as Task;
const docId = a.payload.doc.id;
let createdBy = data.createdBy;
let creatorName = "";
for (let i = 0; i < members.length; i++) {
if (members[i].memberId === createdBy) {
creatorName = members[i].data.name;
}
}
return { docId, ...data, creatorName }
})))}
, это дочерний компонент.ts
this.tasks = this.firestoreService.getTasks(this.projectId, this.members);