Как установить данные таблицы до определенного заголовка в таблице, используя Angular? - PullRequest
0 голосов
/ 27 мая 2020

Я реализовал строку таблицы, столбец после чтения из файлов .csv. Все данные поступают в хорошем состоянии, но после щелчка по заголовку таблицы данные загружаются только до первого столбца. В идеале данные отображаются в соответствующем столбце. Я делюсь снимком экрана для лучшего понимания: enter image description here

Я использую таблицу ниже:

https://www.w3schools.com/css/tryit.asp?filename=trycss_table_fancy

app.component. html

<div class="content" role="main">
  <div class="container">
    <table class="table customers table-striped" id="customers">     
        <tr>
          <th *ngFor="let item of headers" (click)="headerSeleced(item)" style="cursor:pointer">{{item}}</th>
        </tr>     
        <tr>
          <ng-container *ngFor="let item of data | keyvalue">
            <ng-container *ngIf="selectedHeader == item.key">
              <td>
                <div *ngFor="let prop of item.value">{{prop}}</div>
              </td>
            </ng-container>
          </ng-container>
        </tr>     
    </table>
  </div>
</div>

app.component.ts

import { Component, OnInit } from '@angular/core';
import { FileService } from './services/file.service';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
  title = 'temp-app';

  public headers = [];
  public data = {};

  public selectedHeader = null;
  constructor(private fileSvc: FileService) {

  }

  ngOnInit(): void {
    this.fileSvc.getHeaders().subscribe(
      data =>  {
        if (data != null && data.length > 0) {
          let headers = data.split('\n');
          headers = headers.filter(x => x.trim() !== '');
          for (const item of headers) {
            this.headers.push(item.trim());
          }
        } else {
          this.headers = [];
        }
      }
    );

    this.fileSvc.getData().subscribe(
      data =>  {
        if (data != null && data.length > 0) {
          const tempData = data;
          let rows = [];
          rows = tempData.split('\n');
          for (let row of rows) {
            if (row.trim() === '') {
              continue;
            }
            row = row.replace('\r', '')
            const rowSplits = row.split(',');
            this.data[rowSplits[0]] = rowSplits;
          }
        } else {
          this.data = {};
        }
      });
  }

  headerSeleced(header) {
    this.selectedHeader = header;
  }
}

file.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class FileService {

  constructor(private httpClient: HttpClient) {

  }

  public getHeaders() {
    return this.httpClient.get('assets/header.csv', { responseType: 'text' });
  }

  public getData() {
    return this.httpClient.get('assets/tableContent.csv', { responseType: 'text' });
  }
}

Для функциональности вы можете обратиться по указанной ссылке: https://stackblitz.com/edit/angular-ivy-zuncs7

1 Ответ

1 голос
/ 27 мая 2020

Предполагая, что вы можете использовать условное CSS, чтобы скрыть нежелательные стили

обратитесь к следующему

https://stackblitz.com/edit/angular-ivy-ubcknl

CSS Версия с ручным управлением

https://stackblitz.com/edit/angular-ivy-ubcknl

...