问题描述
我的UI中显示了一些卡片。
<div *ngFor="let item of cards | async">...</div>
卡片将是类型卡片阵列的可观察对象。
编号,名称,说明。
我的用例是。
简而言之,所有的开孔都必须在可观察的范围内完成,因为我已经在模板中使用了异步管道。
解决方法
为此,您可以使用map
rxjs运算符,如下所示:
cards$: Observable<Card[]>;
constructor(private serivce: CardService) { }
ngOnInit(): void {
this.cards$ = this.serivce.getCards();
}
将项目添加到可观察数组
// add item with id=6
addItemToObservable() {
this.cards$ = this.cards$.pipe(map(data => {
return [...data,{ id: 6,name: 'name-6',description: "description-6" }]
}))
}
从可观察数组中删除项目
removeItemFromObservable({id}) {
this.cards$ = this.cards$.pipe(map(data => {
return data.filter(item => item.id !== id)
}))
}
最后在您的HTML中:
<ng-container *ngIf="(cards$ | async) as cards">
<table>
<tr *ngFor="let item of cards">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.description}}</td>
<td>
<button type="button" (click)="removeItemFromObservable(item)">
Remove
</button>
</td>
</tr>
</table>
</ng-container>
<button type="button" (click)="addItemToObservable()">
Add
</button>