MEAN 堆栈 - 在表格中显示数据时遇到问题

Posted

技术标签:

【中文标题】MEAN 堆栈 - 在表格中显示数据时遇到问题【英文标题】:MEAN stack - having trouble displaying data in table 【发布时间】:2020-05-11 06:48:09 【问题描述】:

我正在尝试创建一个 MEAN 网络应用程序。目前,我正在尝试创建一个显示数据库中用户列表的表,但是目前使用以下代码我只收到没有数据的表头。谁能帮我确定可能导致问题的原因?

用户列表.component.html

<div class="example-container"class="mat-elevation-z2">

  <table mat-table [dataSource]="dataSource" matSort>

    <!-- Position Column -->
    <ng-container matColumnDef="id">
      <th mat-header-cell *matHeaderCellDef mat-sort-header> id </th>
      <td mat-cell contenteditable="true" *matCellDef="let users">  users.id  </td>
    </ng-container>

    <!-- Position Column -->
    <ng-container matColumnDef="email">
      <th mat-header-cell *matHeaderCellDef mat-sort-header> Email </th>
      <td mat-cell *matCellDef="let users">  users.email  </td>
    </ng-container>

    <!-- Name Column -->
    <ng-container matColumnDef="password">
      <th mat-header-cell *matHeaderCellDef mat-sort-header> Password </th>
      <td mat-cell *matCellDef="let users">  users.password  </td>
    </ng-container>

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

用户列表.component.ts:

import  Component, OnInit, ViewChild  from "@angular/core";
import  MatTableDataSource  from '@angular/material';

import  User  from "./user.model";
import  UsersService  from "./user.service";

@Component(
  selector: 'user-list.component',
  styleUrls: ['user-list.component.css'],
  templateUrl: 'user-list.component.html',  )

export class UserListReport implements OnInit 
  users: any = [];
  dataSource: MatTableDataSource<User>;
  displayedColumns: string[] = ['id', 'email', 'password'];


  constructor(private usersService: UsersService) 
    this.usersService.getUsers();
    this.usersService.getUserUpdateListener()
    .subscribe((users: User[]) => 
      this.users = users;
      this.dataSource = new MatTableDataSource<User>(this.users);
      setTimeout(() => 
      , 0);
    )    
  
  ngOnInit() 
  

user.service.ts:

import  Injectable  from "@angular/core";
import  HttpClient  from "@angular/common/http";
import  Subject  from "rxjs";
import  map  from "rxjs/operators";
import  Router  from "@angular/router";

import  User  from "./user.model";

@Injectable( providedIn: "root" )
export class UsersService 
  private users: User[] = [];
  private usersUpdated = new Subject<User[]>();

  constructor(private http: HttpClient, private router: Router) 

  getUsers() 
    this.http
      .get< message: string; users: any >("http://3.135.49.44:8080/api/user")
      .pipe(
        map(userData => 
          return userData.users.map(user => 
            return 
              email: user.email,
              password: user.password,
              id: user._id
            ;
          );
        )
      )
      .subscribe(transformedUsers => 
        this.users = transformedUsers;
        this.usersUpdated.next([...this.users]);
      );
  
  getUserUpdateListener() 
    return this.usersUpdated.asObservable();
  

【问题讨论】:

【参考方案1】:

看来您订阅主题(usersUpdated) 太晚了,您可以更改函数执行顺序以获取正确的数据。

@Component(
  ...

export class UserListReport implements OnInit 
  ...


  constructor(private usersService: UsersService) 
    // this.usersService.getUsers();
    this.usersService.getUserUpdateListener()
    .subscribe((users: User[]) => 
      this.users = users;
      this.dataSource = new MatTableDataSource<User>(this.users);
      setTimeout(() => 
      , 0);
    )  
    // trigger getUser function after getUserUpdateListener has been subscribed
    this.usersService.getUsers();
  
  ngOnInit() 
  

【讨论】:

谢谢,但似乎仍然没有解决问题。我仍然没有收到数据表中的数据 我为你创建了一个online example。您可以比较与您的代码不同的地方 感谢您花时间创建示例。不过,我似乎仍然无法将数据拉到表格中。我们的 user-list.component.html 和 user-list.component.ts 的代码是一模一样的,所以我猜应该是服务代码吧? 是的,您必须确保从 API(3.135.49.44:8080/api/user) 获取的数据是正确的数据结构。也许这有一些错误。 当我直接在浏览器中使用该网址时,它会列出所有用户,因此错误一定是在将数据传输到表单时。有任何想法吗?再次感谢您的帮助。

以上是关于MEAN 堆栈 - 在表格中显示数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

使用 mongoose 保存子文档数组会创建空数组 MEAN 堆栈

Heroku + MEAN 堆栈错误:参数“url”必须是字符串,而不是未定义

使用 MEAN 堆栈延迟加载 (AngularJS 1.x)

我在从导航堆栈中删除 ViewController 时遇到问题?

Express.js 或 Angular 用于在 MEAN 应用程序中处理路由?