【问题标题】:Angular 7 - Reload / refresh angular material datatable when changes from different componentAngular 7 - 从不同组件更改时重新加载/刷新角度材料数据表
【发布时间】:2019-07-15 14:25:53
【问题描述】:

如何在组件 2 中进行更改时刷新组件 1 中的角度材料数据表。这两个组件不在同一个父节点下/不相关。

customer.service.ts

export class UserManagementService extends RestService {

  private BASE_URL_UM: string = '/portal/admin';

  private headers = new HttpHeaders({
    'Authorization': localStorage.getItem('token'),
    'Content-Type': 'application/json'
  });

  constructor(protected injector: Injector,
    protected httpClient: HttpClient) {
    super(injector);
  }

  createUser(body: UpdateUserDetailPayload): Observable < UpdateUserDetailPayload > {
    return this.post < UpdateUserDetailPayload >
      (this.getFullUrl(`${this.BASE_URL_UM}/user`), body, {
        headers: this.headers
      });
  }

  getEapGroupDetail(groupCode: string): Observable < EapGroupElement > {
      return this.get < GroupPayload >
        (this.getFullUrl(`${this.BASE_URL_UM}/group/${groupCode`), {
        headers: this.headers
      });
  }
}

component1.ts

onCreateUser() {
  this.userManagementService.createUser(this.setCreatePayload())
    .subscribe(response => {
        console.log('success');
      },
      (error => {
        console.log('error');
      })
    )
}

component2.ts

loadGroupDetail() {
  this.userManagementService.getEapGroupDetail(this.groupCode)
    .subscribe(response => {
      this.groupDetail = response;
      this.dataSource = new MatTableDataSource(this.groupDetail.userList);
      this.dataSource.sort = this.sort;
      this.dataSource.paginator = this.paginator;
    })
}
<table mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8">
  <ng-container matColumnDef="username">
    <th mat-header-cell *matHeaderCellDef mat-sort-header class="custom-column">
      {{ 'Dashboard.header.management.user.username' | translate}}
    </th>
    <td mat-cell *matCellDef="let element" class="custom-column">
      {{element.username}}
    </td>
  </ng-container>

  <ng-container matColumnDef="email">
    <th mat-header-cell *matHeaderCellDef mat-sort-header class="custom-column">
      {{ 'Dashboard.header.management.user.email' | translate}}
    </th>
    <td mat-cell *matCellDef="let element" class="custom-column">
      {{element.email}}
    </td>
  </ng-container>

  <tbody>
    <tr mat-header-row *matHeaderRowDef="displayedColumns">
    </tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns;">
    </tr>
  </tbody>
</table>

当我在组件 1 中创建新用户 onCreateUser() 时,loadGroupDetail() 应该在组件 2 中刷新。这些组件不相关

【问题讨论】:

    标签: angular components angular-services angular-components reloaddata


    【解决方案1】:

    您可以使用 RxJS 主题并使用下一个方法来表示更改。在您将用于事件的其他组件中。

    const subject = new Subject();
    button.addEventListener(‘click’, () => subject.next('click');
    subject.subscribe(x => console.log(x));
    

    添加了简单的示例。在这里找到:https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93

    【讨论】:

    • 你能举个例子吗?
    • 大部分时间它包含在某种服务中。然后你就可以从那里得到 Subject 和 observable 了。您也可以使用商店,但在这种情况下这将是多余的。
    • 好的。你能告诉我如何在我的代码中使用 asObservable 和 new 主题吗?
    • 抱歉,它是直截了当的,只需浏览文档和对您之前请求的回复:stackoverflow.com/questions/54759713/…。你学习的概念将在未来的变化中帮助你。
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2019-05-19
    • 2020-06-24
    • 1970-01-01
    • 2021-03-23
    • 2020-03-18
    • 2022-10-12
    • 2018-08-23
    相关资源
    最近更新 更多