У меня есть два компонента.
- Элемент списка - для отображения списка элементов (родительского элемента)
- Элемент - обертка для одного элемента (дочернего элемента)
В Item List component
я в основном создаю наблюдаемое, используя сервис.Функция getItems () возвращает наблюдаемые элементы:
items$: Observable<Item[]>;
ngOnInit() {
this.items$ = this.service.getItems();
}
В шаблоне я делаю ngFor с асинхронным каналом для отображения списка элементов:
<div *ngFor="let item of items$ | async">
<card-item [item]="item"></card-item>
</div>
Теперь в Item component
У меня есть возможность удалить этот конкретный элемент из базы данных firestore:
@Input() item: Item;
removeItem() {
this.service.removeItem(this.item.id);
}
Эта операция занимает некоторое время, поэтому я хотел удалить его «локально» из наблюдаемого в родительском компоненте.
Мне, вероятно, придется отфильтровать наблюдаемое в родительском компоненте и каким-то образом вернуть новое отфильтрованное наблюдаемое, но я не знаю, как мне управлять этим из дочернего компонента?
removeItem() {
// remove from firestore, but this can take some time
this.service.removeItem(this.item.id);
// meanwhile... remove it from the observable on parent
source.pipe(filter(item => item.id !== this.item.id)); // here is the problem I have
}
Как вы можетесм. выше, я не знаю, как «подключиться» к наблюдаемому и отфильтровать его.
Причина в том, что когда я хочу анимировать операцию удаления (например, исчезновение), элемент мигает.Это потому, что анимация заканчивается раньше, чем запись удаляется из пожарного магазина.