Mysql 表数据未显示在使用 Nodejs 的 Angular 材料表上

Posted

技术标签:

【中文标题】Mysql 表数据未显示在使用 Nodejs 的 Angular 材料表上【英文标题】:Mysql table data is not displaying on Angular material table using Nodejs 【发布时间】:2020-07-02 10:22:40 【问题描述】:

HTML 文件

<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

  <ng-container matColumnDef="id">
    <th mat-header-cell *matHeaderCellDef> No. </th>
    <td mat-cell *matCellDef="let element"> element.id </td>
  </ng-container>

  <ng-container matColumnDef="stud_id">
    <th mat-header-cell *matHeaderCellDef> Stud_id </th>
    <td mat-cell *matCellDef="let element"> element.stud_id </td>
  </ng-container>

  <ng-container matColumnDef="stud_app_date">
    <th mat-header-cell *matHeaderCellDef> Date </th>
    <td mat-cell *matCellDef="let element"> element.stud_app_date | date </td>
  </ng-container>

  <ng-container matColumnDef="stud_first_name">
    <th mat-header-cell *matHeaderCellDef> Name </th>
    <td mat-cell *matCellDef="let element"> element.stud_first_name </td>
  </ng-container>

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

import  Component, OnInit  from '@angular/core';
import  MatTableDataSource  from '@angular/material/table';
import student from '../_interface/stud.model';
import  RegistrationService  from '../../../registration.service';

@Component(
  selector: 'app-get-stud',
  templateUrl: './get-stud.component.html',
  styleUrls: ['./get-stud.component.css']
)
export class GetStudComponent implements OnInit 

 public displayedColumns = ['id', 'stud_id', 'stud_app_date','stud_first_name'];

  public dataSource = new MatTableDataSource<student>();

  constructor(private _registrationService : RegistrationService)  

  ngOnInit() : void 
    this.getAllStudents();    
  

  public getAllStudents = () => 
    this._registrationService.registerGetStud()
    .subscribe(res => 
      this.dataSource.data = res as student[],
      response => console.log('Success!',response),
              error => console.error('Error!',error);
              console.log(this.dataSource.data);     
    )
  

**interface**

export interface student
    id: number;
    stud_id: string;
    stud_app_date: Date;
    stud_first_name: string;
  

未检查的 runtime.lastError:消息端口在收到响应之前关闭。

我必须使用node js api在角度材料表中显示mysql表数据..但它没有显示任何数据...... 然后我使用邮递员检查了节点js api,甚至我检查了控制台日志..但是数据都显示在两者上......

【问题讨论】:

【参考方案1】:

尝试通过添加更改检测器来呈现更改

首先,你需要在构造函数中注入它

 constructor(private readonly changeDetectorRef: ChangeDetectorRef, private _registrationService : RegistrationService)

然后你需要在添加数据后添加markforcheck,如下所示

  public getAllStudents = () => 
    this._registrationService.registerGetStud()
    .subscribe(res => 
      this.dataSource.data = res as student[]
      this.changeDetectorRef.markForCheck();   
    )
  

【讨论】:

【参考方案2】:
component file

public getAllStudents = () => 
    this._registrationService.registerGetStud()
    .subscribe(res => 
      console.log(res),
      this.dataSource.data = res.response as student[],
      response => console.log('Success!',response),
              error => console.error('Error!',error);
              console.log(this.dataSource.data);     
    )
  

实际上,我在响应中发送结果(在节点 js 中)...所以,在组件文件中添加响应以及在 html 文件中添加数据...现在它工作正常...就像

this.dataSource.data = res.response as student[],

"status":200,"response":["id":1,"stud_id":"STUDENT_ID_0",".......

html

<table mat-table [dataSource]="dataSource.data".....

非常感谢 Atresh Kulkarni 的关心

【讨论】:

以上是关于Mysql 表数据未显示在使用 Nodejs 的 Angular 材料表上的主要内容,如果未能解决你的问题,请参考以下文章

在查询Mysql Nodejs时结果未定义

sqoop 导入未识别显示 ClassNotFountException 错误的 mysql 表

nodeJS:获取响应未在浏览器中打开-说页面不起作用

MySQL Workbench 数据导入向导未显示 CSV 中的所有列

如何以刷新率在nodejs中显示来自mysql的数据

如何在不刷新html页面的情况下在表格上显示数据(使用nodejs和mysql ajax)