【问题标题】:Can't retrieve json array from nested json to mat table datasource无法从嵌套 json 检索 json 数组到 mat 表数据源
【发布时间】:2018-12-10 20:04:23
【问题描述】:

正如我在标题中提到的,我在从嵌套的 json 数组中检索数据并将其分配给 mat 表的数据源时遇到问题。所以我希望有一个人和我遇到类似问题的人可以帮助我。下面我粘贴我的代码:

COURSE.SERVICE.ts

import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';
import { HttpClient } from '@angular/common/http';
import { Course } from '../_models/course';
import { CourseEnrolment } from '../_models/available_exams/course_enrolment';

@Injectable({
  providedIn: 'root'
})
export class CourseService {
  baseUrl = environment.apiUrl;
  getAllExams(id) {
    return this.http.get<CourseEnrolment[]>(this.baseUrl + 'allexams/' + id);
  }

AVAILABLE-EXAM.COMPONENT.ts

import { Component, OnInit, ViewChild } from '@angular/core';
import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material';
import { CourseService } from 'src/app/_services/course.service';
import { AuthService } from 'src/app/_services/auth.service';

import { CourseEnrolmentsExam } from 'src/app/_models/courseEnrolmentsExam';
import { Exam } from 'src/app/_models/available_exams/exam';
import { Users } from 'src/app/_models/available_exams/users';
import { CourseEnrolment } from 'src/app/_models/available_exams/course_enrolment';
import { ExamList } from 'src/app/_models/available_exams/exam_list';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-available-exams',
  templateUrl: './available-exams.component.html',
  styleUrls: ['./available-exams.component.scss']
})
export class AvailableExamsComponent implements OnInit {
  dataSourceExam = new MatTableDataSource();

  exams: Exam[];
  courseEnrolments: CourseEnrolment[];
  displayedColumns = [
    'id',
    'name',
    'subject',
    'timeLimit',
    'examResult'
  ];
  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  constructor(
    private courseService: CourseService,
    private authService: AuthService,
    private httpService: HttpClient
  ) {}

  ngOnInit() {
    this.courseService
      .getAllExams(this.authService.decodedToken.nameid)
      .subscribe(result => {
        this.courseEnrolments = result['courseEnrolments'];

        console.log(result['courseEnrolments']);
        console.log(result['subject']);
        console.log(result['courseEnrolments.subject']);
        console.log(result['firstName']);
        console.log(result['subject']);
        console.log(result['courseEnrolments.subject']);
        console.log(result['courseEnrolments']);
        console.log(result['exams']);
        console.log(result['courseEnrolments.subject']);
        console.log(result['firstName']);
        if (!result) {
          return;
        }

        this.dataSourceExam = new MatTableDataSource(this.courseEnrolments);
        this.dataSourceExam.paginator = this.paginator;
        this.dataSourceExam.sort = this.sort;
      });
  }
  applyFilter(filterValue: string) {
    filterValue = filterValue.trim();
    filterValue = filterValue.toLowerCase();
    this.dataSourceExam.filter = filterValue;
  }
  handleClick(event: Event) {
    console.log('‘Click’', event);
  }
}

这是我来自 webapi 的 json 响应:

【问题讨论】:

    标签: javascript json angular datasource


    【解决方案1】:

    尝试像这样设置数据源,在数据源后添加 .data :

    this.dataSourceExam.data = result['courseEnrolments'];
    

    【讨论】:

    • 我这样做了,但我不知道如何在例如“主题”中打印值
    • 第一个主题可以这样访问:result.courseEnrolments[0].exams[0].subject
    • 您需要传递一个对象数组,在您的代码中,您访问的值在对象的特定级别上不存在
    • 我是 Angular 新手,我不知道该怎么做
    • 好吧,它不完全是 Angular 的东西,但如果你不需要 courseEnrolments arr 中的 id,你可以创建一个新数组并将所有考试推送到它上面,如下所示: const arr = [ ] result.courseEnrolments.forEach(course => { course.exams.forEach(exam => arr.push(exam)) })
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2015-08-29
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多