为什么没有数据源的<mat-table>不会在Angular 7中显示

时间:2019-04-29 12:26:15

标签: angular angular-material mat-table

我想使用<mat-table>显示选项的名称及其对应的给定值(供用户更改)。由于选项可能需要通过不同的方式(例如,滑动切换或垫选择)来设置其值,因此我不得不将其写下来而没有数据源(或者至少在我能找到的范围内,不能在打字稿文件中使用预先编写的html标签)。

因此,我的MWE为:

<mat-table>
    <mat-header-row *matHeaderRowDef>
        <mat-header-cell>header</mat-header-cell>
    </mat-header-row>

    <mat-row>
        <mat-cell>
             cell
        </mat-cell>
    </mat-row>
</mat-table>

但是,当我查看页面时,它仅显示一行,没有任何字符串。我想在<mat-card>(或更确切地说<mat-card-content>)内使用此表,但是即使我在此范围之外尝试,也只能得到该行而已。这是Mat卡中的样子:

Blank Line

如何正确显示表格?


*编辑:* 由于要求提供,因此这里也是.ts文件。

import { Component, OnInit, ViewChild } from '@angular/core';

@Component({
  selector: 'app-general',
  templateUrl: './general.component.html',
  styleUrls: ['./general.component.scss']
})
export class GeneralComponent implements OnInit {


  @ViewChild('resolutionSelect') resolutionSelect: MatSelect;

  resolutions: ResolutionOptionsInterface[] = [
    { value: '1920 x 1080' },
    { value: '800 x 600' }
  ];
  public selectedRes = this.resolutions[0];
  public isFullscreenEnabled = true;

  constructor() { }

  ngOnInit() {
    console.log("in oninit");
    this.resolutionSelect.value = this.resolutions[0].value;
  }

}

这比最小的工作示例要多一点,所以我会解释一下:

  • 我的选择之一是分辨率,该分辨率可由mat-select
  • 选择
  • mat-select在html文件中定义如下,
  • mat-select将获得resolutions数组中定义的预定义值
  • 我的另一个选择就是全屏选择,使其成为mat-slide-toggle(但是,这还没有完全实现)

    <mat-select #resolutionSelect fxFlex="200px"> <mat-option *ngFor="let res of resolutions" [value]="res.value" class="right"> {{res.value}} </mat-option> </mat-select>

1 个答案:

答案 0 :(得分:1)

实际上,可以在没有数据源的情况下创建物料表。 您需要确保使用显示的列和全部对标题进行了定义。

示例-html文件:

<table mat-table class="mat-elevation-z8">
  <ng-container matColumnDef="someValue">
    <th mat-header-cell *matHeaderCellDef mat-sort-header>Some Value Header</th>
  </ng-container>

  <ng-container matColumnDef="someOtherValue">
    <th mat-header-cell *matHeaderCellDef mat-sort-header>
      Some Other Value Header
    </th>
  </ng-container>

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

在ts文件中,您需要定义数组

displayedColumns: string[] = ['someValue', 'someOtherValue'];

编辑: 如果您的需求只是带有几个预定义值的简单表,则可以通过将本机表元素与具有材质的css类一起使用来实现它:

<table class="mat-table" >
  <tr class="mat-header-row">
    <th class="mat-header-cell">A</th>
    <th class="mat-header-cell">B</th>
  </tr>
  <tr class="mat-row">
    <td class="mat-cell">A</td>
    <td class="mat-cell">B</td>
  </tr>
</table>