假设我有下面的组件.它显示从后端服务获取的员工列表,正如您所看到的,每个员工都显示一个删除按钮,如果单击该按钮,将触发后台调用以根据员工的ID删除该员工.如果一切顺利,删除后端服务将返回200,仅此而已.

现在,为了使我的员工列表保持更新,我需要再次调用Fetch Employees后端服务来获取更新的列表,这对我来说似乎很不幸,因为它所需要的只是以某种方式触发asyn管道再次执行.

这件事还能处理得更好吗?

@Component({
  selector: 'app-employee-home',
  template: '<div *ngFor="let employee of (employees$ | async) as employees">\n' +
    '  <ul>\n' +
    '    <li>{{employee.firstname}}</li>\n' +
    '    <li>{{employee.lastname}}</li>\n' +
    '  </ul>\n' +
    '  <button (click)="delete(employee.id)">Delete</button>\n' +
    '</div>',
  styleUrls: ['./employee-home.component.scss']
})
export class EmployeeHomeComponent{

  employees$!: Observable<any>;

  constructor(private httpClient: HttpClient,
              private router: Router) {
    this.employees$ = this.httpClient.get('http://localhost:8080/employees')
      .pipe(
        map(response => response.content )
      );
  }

  delete(id: any) {
    this.httpClient.delete(`http://localhost:8080/employees/${id}`)
      .subscribe(value => {
        this.employees$ = this.httpClient.get('http://localhost:8080/employees')
          .pipe(
            map(response => response.content )
          );
      });
  }
}

推荐答案

在得到删除响应后,只需从DOM中删除该元素.不需要再次调用Employees API.

<div *ngFor="let employee of (employees$ | async) as employees" #ref>\n' +
    '  <ul>\n' +
    '    <li>{{employee.firstname}}</li>\n' +
    '    <li>{{employee.lastname}}</li>\n' +
    '  </ul>\n' +
    '  <button (click)="delete(employee.id, ref)">Delete</button>\n' +
    '</div>

现在,您在Delete方法中有了Element的引用,并且只需删除它.

delete(id: any, ref: HTMLElement) {
    this.httpClient.delete(`http://localhost:8080/employees/${id}`)
      .subscribe(() => {
        ref.remove();
      });
  }

Angular相关问答推荐

如何在Angular中执行一个操作条件为多个可观测值?

更改物料设计中的复选框勾选 colored颜色

如何包装NGB carousel ?

在Angular 17独立模式下,如何使用Swiper 11.0.5版使Bootstrap下拉菜单在Swiper元素外部可见

Angular 应用程序未在Azure应用程序服务中运行

ANGLING:ExpressionChangedAfterChecked在嵌套形式中由子项添加验证器

如何在AngularJs中剪断细绳

如何使用Angular 将图像作为二进制数据发送到我的API?

npm install命令在基本Angular 应用程序的天蓝色构建管道中失败

由于ngcc操作失败,Angular扩展可能无法正常工作

Angular 在关闭另一个对话框后打开另一个对话框的最佳做法是什么?

单选按钮的Angular2 Reactive Forms formControl

带有嵌套表单数组的 Angular react式表单

在 Angular 2 中订阅路由参数和查询参数

Angular 6在输入键上添加输入

NG 测试中的调试测试

unexpected token < 错误

Angular 应用程序中的语法错误:Unexpected token <

NG2-Charts 无法绑定到 datasets,因为它不是 canvas的已知属性

为什么用?模板绑定中的运算符?