如何在angular material table中调用用户定义的方法?

How to call a user defined method in angular material table?

如何在angular materialtable中调用用户定义的方法?我正在使用 class 对象而不是接口,当我调用该方法时它不起作用。我能够显示属性但不能显示方法输出。

这是代码片段。

export class User implements IUser {

constructor(public id:number, public email: string,
  public first_name: string, public last_name: string, public avatar: string) {
    console.error("Construcor Eroor.")
  }

  upper(): string {
    console.log(this.email.toUpperCase())
    return this.email.toUpperCase();
  }
}



<ng-container matColumnDef="upper">
    <mat-header-cell *matHeaderCellDef>
        upper
    </mat-header-cell>
    <mat-cell *matCellDef="let user ">
        {{user.upper}} <!-- calling a method in the User class -->
    </mat-cell>
</ng-container>

这是完整的 stackblitz link。 https://stackblitz.com/edit/angular-material-reactive-table-ddcsq4

修改后的代码如下:

app.component.html:

<hello [name]='name'></hello>
<app-sample></app-sample>

使用上面编辑的代码,您将能够看到 name 为 Angular:

希望对您有所帮助!!!

您应该将来自您的服务 (sampleSvc) 的响应映射到一个 User 对象数组中,这样您就可以访问 User 实例,从而可以调用 upper() 方法来自 User class.

this.sampleSvc.findByKey(key).subscribe(data => {
  const users = data.map(obj => new User(
    obj.id,
    obj.email,
    obj.first_name,
    obj.last_name,
    obj.avatar,
  ));
  this.userSubject.next(users);
});

此外,在您的模板 component.html 上,您需要调用 upper() 方法

<ng-container matColumnDef="upper">
  <mat-header-cell *matHeaderCellDef>
    upper
  </mat-header-cell>
  <mat-cell *matCellDef="let user ">
    {{user.upper()}}
  </mat-cell>
</ng-container>

我已经在 here 的演示中修复了它。