【问题标题】:Adding PrimeNg Table Module to Component Causes Error - Maximum call stack size exceeded将 PrimeNg 表模块添加到组件会导致错误 - 超出最大调用堆栈大小
【发布时间】:2021-12-14 22:07:06
【问题描述】:

我有一个角度组件 npm 包,它接受并返回数据。一切正常,直到我尝试在我的 html 中添加一个 p 表。我已将其范围缩小到出现在组件模块文件中。

我可以将 primeNg tableModule 添加到我的 app.module 文件中,但是如果我尝试将其添加到我的组件模块文件中,然后运行“npm run packagr”来捆绑我的包,我会收到以下错误:

Maximum call stack size exceeded

这是我的 header.module 文件,以及导致错误的两行

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HeaderComponent } from './header.component';
import { TableModule } from 'primeng/table'; //TABLE MODULE IS CAUSING THE ERROR

@NgModule({
  declarations: [HeaderComponent],
  imports: [CommonModule, TableModule], //TABLE MODULE IS CAUSING THE ERROR
  exports: [
    HeaderComponent,
  ],
})
export class HeaderModule {}

我查看了有关此错误的其他答案,但他们大多谈论递归循环,而我的错误只是通过将 TableModule 添加到模块文件中发生。

有人知道为什么会导致错误吗?

更新!!!

这是我试图在 header.html 文件中实现的 p 表:

  <p-table
    [columns]="this.templateRows"
    [value]="this.tableData"
    responsiveLayout="scroll"
    [scrollable]="true"
    scrollHeight="100px"
    [virtualScroll]="true"
  >
    <ng-template pTemplate="header" let-columns>
      <tr>
        <th *ngFor="let col of columns">
          {{ col.header }}<br />
          <small>{{ col.regex }}</small>
        </th>
      </tr>
    </ng-template>
    <ng-template pTemplate="body" let-rowData let-columns="columns">
      <tr>
        <td *ngFor="let col of columns">
          {{ rowData[col.header] }}
        </td>
      </tr>
    </ng-template>
  </p-table>

这里是导入 tableModule 的 app.module:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HeaderModule } from './modules/header/header.module';
import { TableModule } from 'primeng/table';
@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, AppRoutingModule, HeaderModule, TableModule],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}

这里是 header.component.ts 文件

import {
  Component,
  EventEmitter,
  OnInit,
  Input,
  Output,
  ViewChild,
  ElementRef,
} from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';

@Component({
  selector: 'app-header-naomi',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.css'],
})
export class HeaderComponent implements OnInit {
  @ViewChild('fileUpload', { static: false }) fileUpload: ElementRef;
  headerRow: any = [];
  tableData: any = [];
  templateRows = [
    { field: 'name', header: 'Name', regex: '[a-zA-Z]' },
    { field: 'age', header: 'Age', regex: '^[0-9]*$' },
    { field: 'year group', header: 'Year Group', regex: null },
  ];

  constructor() {}

  ngOnInit(): void {
  }
 
  processUpload() {
    const fileUpload = this.fileUpload.nativeElement;
    fileUpload.click();
  }

  async uploadFiles() {
    const fileUpload = this.fileUpload.nativeElement;
    this.tableData = this.validateSpreadsheet(fileUpload, this.templateRows);
  }

  async validateSpreadsheet(fileUpload: any, templateRows: any) {
    let uploadData: any = [];
    for (const file of fileUpload.files) {
      const fileExtension = file.name.split('.').pop();
      let valid = false;
      if (fileExtension === 'csv') {
        valid = true;
      }
      if (!valid) {
        throw "Unsupported file type, file must be 'of type .csv";
      }
      const reader = new FileReader();

      reader.onload = async (e: any) => {
        const data = new Uint8Array(e.target.result);

        const workbook = XLSX.read(data, {
          type: 'array',
          cellDates: true,
          dateNF: 'dd/mm/yyyy',
        });
        if (workbook.SheetNames.length === 0) {
          console.error('No sheets');
        }
        for (const sheetName of workbook.SheetNames) {
          const rows: any = XLSX.utils.sheet_to_json(
            workbook.Sheets[sheetName],
            {
              defval: null,
            }
          );

          for (let row of rows) {
            uploadData.push(row);
          }
        }
      };
      reader.readAsArrayBuffer(file);
      return uploadData;
    }
  }
}

【问题讨论】:

  • 你好。你有关于 HeaderComponent 上的 TableModule 的实现吗?可以分享一下组件代码吗?
  • @Guiditox 你好,我在我的标头组件 html 中注释掉了 ptable,因为我在尝试将它添加到模块时遇到了错误
  • 是的,但是如果您在 TableModule 上有错误,并且您在 HeaderComponent 上使用了表格模块,那么查看您的实现很重要。
  • 你的app.module没关系
  • 请输入您的 .ts 标头代码。

标签: javascript angular typescript npm primeng


【解决方案1】:

不确定这是怎么回事,但我设法通过卸载节点模块和 package-lock.json 文件来修复它。然后重新安装。

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多