【问题标题】:Angular materials Mat-table, not working with in the html with .push角材料垫表,不适用于带有 .push 的 html
【发布时间】:2019-08-29 15:37:48
【问题描述】:

我正在使用角度 8 进行无限滚动。我正在使用角度材料表来显示我的数据。

HTML:

<mat-table [dataSource]="displayOfMassSendObjects" 
   infinite-scroll
   [infiniteScrollDistance]="scrollDistance"
   [infiniteScrollUpDistance]="scrollUpDistance"
   (scroll)="onScrollDown()"
   (scrollup) = "onScrollUp()"
>

 <ng-container id = "companyNameColumn" matColumnDef="companyName">
    <mat-header-cell id = "companyNameTitle" 
           *matHeaderCellDef>CompanyName</mat-header-cell>
    <mat-cell class = "companyNameData" *matCellDef="let row"> 
           {{row.companyName}}</mat-cell>
 </ng-container>

 <ng-container id = "emailColumn" matColumnDef="email">
    <mat-header-cell id = "emailTitle" 
          *matHeaderCellDef>Email</mat-header-cell>
    <mat-cell class = "emailData" class="email" *matCellDef="let row"> 
           {{row.email}}</a></mat-cell>
  </ng-container>

    <mat-header-row *matHeaderRowDef="tableColumns"></mat-header-row>
    <mat-row *matRowDef="let row; columns: tableColumns"> </mat-row>

</mat-table>

加载时,表中显示了 10 条记录。当我向下滚动时,我预计 HTML 中会填充更多记录,但事实并非如此。然而,这些记录被添加到 console.log() 中的数组中。我认为问题在于 HTML Angular Materials 无法识别 .push,因为当我将 .push 替换为 .slice 时,记录会显示在 HTML 中,但不希望应用程序像那样工作。

这是我想要滚动条的表格的组件:

 export class MassSendComponent implements OnInit {
  sum = 10; 
  globalList = []; 
  displayOfMassSendObjects: MassSend[]; 
  tableColumns : string[] = ['ispNumber','companyName', 'email', 'taxId']
  constructor(
      private mockMassSendService: MockMassSendService,
       ) {}

  ngOnInit(): void {
      this.getMassSendData();  
  }

 getMassSendData() {
      this.mockMassSendService.getMassSendData()
         .subscribe(massSendObjects => {
             this.globalList = massSendObjects; 
             this.displayOfMassSendObjects = massSendObjects.slice(0, 
             this.sum);
     }); 
  }

  getMoreData() {
    this.displayOfMassSendObjects.push(this.globalList[this.sum]); 
  }


 onScrollDown(): void {
   console.log(this.displayOfMassSendObjects);  
   this.getMoreData(); 
   this.sum += 1;
  }
}

我还有一个服务方法被调用:

     export class MockMassSendService {

      constructor() { }

         getMassSendData(): Observable<MassSend[]> {
             return of(mockMassSend); 
         }
      }

【问题讨论】:

  • 不要推送,试试 concat

标签: arrays angular angular-material mat-table


【解决方案1】:

您可以在每次获取新数据时使用displayOfMassSendObjects = new MatTableDataSource(this.displayOfMassSendObjects);,这将初始化一个新的数据源对象。 您看不到新添加的行的原因是 Mat 表仅在更改对数据源的引用时才反映更改,这就是为什么使用 slice 方法时它可以正常工作的原因。

【讨论】:

  • 谢谢,当我这样做时,我得到一个错误,我必须使用 this.displayOfMassSendObjects。然后当我这样做时。显示...我得到另一个错误,我需要推送,连接等。你知道正确的语法吗?这就是我想要做的:
  • getMoreData() { this.displayOfMassSendObjects = new MatTableDataSource(this.displayOfMassSendObjects); this.displayOfMassSendObjects.push(this.globalList[this.sum]) }
  • ERROR 错误 TS2740:类型 'MatTableDataSource' 缺少类型 'any[]' 的以下属性:长度、弹出、推送、连接等 24 个。
  • 我似乎无法理解错误。您可以查看此示例以供参考 [link]stackblitz.com/angular/….
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 2020-04-20
  • 1970-01-01
  • 2019-11-26
  • 2023-01-15
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多