Javascript mat选项卡中嵌套的组件是否有生命周期挂钩?
制表器新手 我有一个mat选项卡组,用于浏览三个制表器表 我使用的方法是在component.ts内创建一个div元素,并将其插入component.html内的现有div中 我遇到的问题是,只有选定选项卡的html加载到DOM中,因此未选定选项卡中的任何div元素都不在DOM中,并且不能通过id引用到我的component.ts中。当我切换到最初加载的选项卡以外的选项卡时,制表器表不会绘制 希望Angular有一个生命周期钩子,在mat选项卡的子组件上调用它,当用户选择该选项卡时,我可以使用它触发绘图 当然,我对其他/更好的方法持开放态度 mat选项卡组htmlJavascript 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-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`)
}
}