Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mat选项卡中嵌套的组件是否有生命周期挂钩?_Javascript_Angular_Typescript_Angular Material_Tabulator - Fatal编程技术网

Javascript mat选项卡中嵌套的组件是否有生命周期挂钩?

Javascript mat选项卡中嵌套的组件是否有生命周期挂钩?,javascript,angular,typescript,angular-material,tabulator,Javascript,Angular,Typescript,Angular Material,Tabulator,制表器新手 我有一个mat选项卡组,用于浏览三个制表器表 我使用的方法是在component.ts内创建一个div元素,并将其插入component.html内的现有div中 我遇到的问题是,只有选定选项卡的html加载到DOM中,因此未选定选项卡中的任何div元素都不在DOM中,并且不能通过id引用到我的component.ts中。当我切换到最初加载的选项卡以外的选项卡时,制表器表不会绘制 希望Angular有一个生命周期钩子,在mat选项卡的子组件上调用它,当用户选择该选项卡时,我可以使用它

制表器新手

我有一个mat选项卡组,用于浏览三个制表器表

我使用的方法是在component.ts内创建一个div元素,并将其插入component.html内的现有div中

我遇到的问题是,只有选定选项卡的html加载到DOM中,因此未选定选项卡中的任何div元素都不在DOM中,并且不能通过id引用到我的component.ts中。当我切换到最初加载的选项卡以外的选项卡时,制表器表不会绘制

希望Angular有一个生命周期钩子,在mat选项卡的子组件上调用它,当用户选择该选项卡时,我可以使用它触发绘图

当然,我对其他/更好的方法持开放态度

mat选项卡组html

<mat-tab-group *ngIf="hasData" mat-align-tabs="start">
    <mat-tab *ngFor="let tablename of tableNames">
        <ng-template matTabLabel>
            <span>{{tablename}}</span>
        </ng-template>
        <div>
            <app-tabulator-table *ngIf="dataServiceSelectedDate" [integrationName]="integrationName" [tableName]="tablename" [processDate]=dataServiceSelectedDate>
            </app-tabulator-table>
        </div>
    </mat-tab>
</mat-tab-group>
export class TabulatorTableComponent implements OnInit {

  @Input() tableName: string;
  @Input() processDate: string;
  @Input() integrationName: string;

  fields: RunDataTableField[];
  dataContent: RunDataContent;

  tab = document.createElement("div");
  tabColumns: any[] = [];
  tabRows: any[] = [];

  constructor(private clientDataService: ClientDataService) {
  }

  ngOnInit() {
    this.clientDataService.getRunDataContent(this.integrationName, this.processDate, `${this.tableName}.json`).toPromise().then(dataContent => 
      {
        console.log(this.dataContent)
        this.tabColumns = this.buildHeaders(dataContent);
        this.tabRows = this.buildRows(dataContent);
        this.redraw();
      });
  }

  calculationFormatter = function (cell, formatterParams) {
    var value = cell.getValue();
    cell.getElement().style.backgroundColor = "#fdd0ff";
    return value;
  }

  buildHeaders(runData: RunDataContent): any[] {
    console.log(`${this.tableName}: creating headers object`);
    var headers: any[] = [];
    runData.schema.fields.forEach(f => {
      var c: any = {};
      c.title = f.name;
      c.field = f.name;
      c.headerFilter = "input"
      switch (f.validationType) {
        case "calculation": {
          c.formatter = this.calculationFormatter
          break;
        }
        case "raw": {

        }
        case "table": {

        }

        default: {
          break;
        }
      }
      if (f.tip != null && f.tip.length > 0) {
        c.tooltip = f.tip;
        c.headerTooltip = f.tip;
      }
      headers = headers.concat(c);
    });
    console.log(`${this.tableName}: createad headers object`);
    console.log(this.tabColumns);
    return headers;
  }

  buildRows(runData: RunDataContent): any[] {
    console.log(`${this.tableName}: creating rows object`);
    var rows: any[] = [];
    runData.rows.forEach(f => {
      rows = this.tabRows.concat(f);
    });
    return rows;
  }



  private drawTable(): void {
    new Tabulator(this.tab, {
      layout: "fitDataStretch",
      selectable: true,
      selectableRangeMode: "click",
      data: [],
      columns: this.tabColumns,
      height: "311px"
    });
    document.getElementById(`${this.tableName}`).appendChild(this.tab);

    new Tabulator()
  }

  redraw() {
    console.log(`${this.tableName}: drawing table`)
    this.drawTable();
    console.log(`${this.tableName}: completed drawing table`)
  }
}