You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 5:新增用户后如何通过重新调用API刷新兄弟组件表格

解决Angular Material表格跨组件实时更新问题

我来帮你搞定这个问题!核心问题在于你目前的双向绑定没有完全生效,导致父组件的users数据没有被正确更新,进而第二个组件拿不到最新数据。咱们一步步改:

1. 完善UserComponent的双向绑定逻辑

你在父组件模板里用了[(users)]="users"这种双向绑定语法,但UserComponent里只定义了@Input(),缺少对应的@Output()事件发射器,所以子组件更新users后没法通知父组件。

修改user.component.ts:

import { Output, EventEmitter } from '@angular/core';

export class UserComponent implements OnChanges {
  @Input() users: UserDto[];
  // 新增Output事件,名字必须是`[inputName]Change`才能配合双向绑定语法
  @Output() usersChange = new EventEmitter<UserDto[]>();
  displayedColumns = ['name', 'age'];
  dataSource = new MatTableDataSource<UserDto>();

  constructor(private _dialog: MatDialog, private _userService: UserService) {}

  ngOnChanges() {
    this.dataSource.data = this.users;
  }

  // 修正方法名笔误,和调用保持一致
  loadUsers() {
    this._userService.getUsers("../api/customers/")
      .subscribe((users: UserDto[]) => {
        this.users = users;
        this.dataSource.data = this.users;
        // 发射事件,通知父组件更新users数据
        this.usersChange.emit(users);
      })
  }

  openCreateUserDialog() {
    let dialogRef = this._dialog.open(AddUserComponent, { height: 'auto', width: '500px', disableClose: true })
    dialogRef.afterClosed().subscribe(result => {
      if (result === "cancel") {
        return;
      } else {
        this.loadUsers();
      }
    })
  }
}

2. 确保SecondComponent的更新逻辑可靠

你的SecondComponent里的ngOnChanges已经写了更新dataSource的逻辑,不过可以稍微优化一下初始化和判断,避免空值问题:

修改second.component.ts:

export class SecondComponent implements OnChanges {
  @Input() users: UserDto[];
  displayedColumns = ['is-approved', 'alias'];
  // 先空初始化数据源,避免组件初始化时users未传入导致的问题
  dataSource = new MatTableDataSource<UserDto>();

  constructor(private _dialog: MatDialog, private _userService: UserService){}

  ngOnChanges() {
    // 确保users存在再赋值,防止空指针
    if (this.users) {
      this.dataSource.data = this.users;
    }
  }
}

这样修改后,当你在UserComponent里新增用户并调用loadUsers获取最新数据时,会通过usersChange事件把新数据同步给父组件,父组件的users更新后会自动传递给SecondComponent,触发它的ngOnChanges方法更新数据源,表格就会实时刷新了,不用再手动刷新页面~

内容的提问来源于stack exchange,提问作者Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:35:21