0

I hope everyone is doing great. Im trying to render data to the table for a material table but I cant solve why it isnt working. When I want to assign the data to the datasource for the table to render it dosnt get the information. Would apprecaite if someone could look for a secound and see if something.

Typescript and HTML:

import { Component, OnInit, ViewChild } from '@angular/core';
import { Nobina2NewsesService, StopInfoApiApplicationQueriesNobina2NewsesNobina2NewsResponse } from '../../services/mssql/stop/api/v1';
import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';

@Component({
  selector: 'app-news',
  templateUrl: './news.component.html',
  styleUrls: ['./news.component.css']
})

export class NewsComponent implements OnInit {

  news_list: any;
  user_list: any;
  data: any;

  displayedColumns: string[] = ['id', 'title', 'date', 'text'];
  dataSource: MatTableDataSource<StopInfoApiApplicationQueriesNobina2NewsesNobina2NewsResponse>;

  @ViewChild(MatPaginator)
  paginator!: MatPaginator;
  @ViewChild(MatSort)
  sort!: MatSort;
  
  newsListService = this.newsService.v1Nobina2NewsesGet().subscribe(
    (res) => {
      this.news_list = res;
    },
    (err) => { console.log(err); alert("Kolla nätverksanslutnignen(CORS)"); },
    () => console.log('done a lot  with news!')
  );


  constructor(private newsService: Nobina2NewsesService) {

    // Assign the data to the data source for the table to render
    this.dataSource = new MatTableDataSource(this.news_list);
  }

  ngOnInit(): void {
    throw new Error('Method not implemented.');
  }

  ngAfterViewInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }

  applyFilter(event: Event) {
    const filterValue = (event.target as HTMLInputElement).value;
    this.dataSource.filter = filterValue.trim().toLowerCase();

    if (this.dataSource.paginator) {
      this.dataSource.paginator.firstPage();
    }
  }
}
 <mat-form-field appearance="standard">
    <mat-label>Filter</mat-label>
    <input matInput (keyup)="applyFilter($event)" placeholder="Filter" #input>
  </mat-form-field>
  
  <div class="mat-elevation-z8">
    <table mat-table [dataSource]="dataSource" matSort>
  
      <!-- ID Column -->
      <ng-container matColumnDef="id">
          <th mat-header-cell *matHeaderCellDef mat-sort-header> ID </th>
          <td mat-cell *matCellDef="let news"> {{ news.id }} </td>
      </ng-container>
  
      <!-- Progress Column -->
      <ng-container matColumnDef="title">
          <th mat-header-cell *matHeaderCellDef mat-sort-header> Titel </th>
          <td mat-cell *matCellDef="let news"> {{news.title}}% </td>
      </ng-container>
  
      <!-- Name Column -->
      <ng-container matColumnDef="date">
          <th mat-header-cell *matHeaderCellDef mat-sort-header> Datum </th>
          <td mat-cell *matCellDef="let news"> {{ news.date.split('T')[0] }} </td>
      </ng-container>
  
      <!-- Fruit Column -->
      <ng-container matColumnDef="text">
          <th mat-header-cell *matHeaderCellDef mat-sort-header> Text </th>
          <td mat-cell *matCellDef="let news"> {{news.text}} </td>
      </ng-container>
  
      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let news; columns: displayedColumns;"></tr>
  
      <!-- Row shown when there is no matching data. -->
      <tr class="mat-row" *matNoDataRow>
        <td class="mat-cell" colspan="4">No data matching the filter "{{input.value}}"</td>
      </tr>
    </table>
  
    <mat-paginator [pageSizeOptions]="[10, 25, 100]" aria-label="Select page of news"></mat-paginator>
  </div>

1
  • please provide stackblitz example if possible... provide the data that we get when we subscribe to v1Nobina2NewsesGet Commented Aug 31, 2022 at 9:44

1 Answer 1

1

It may be that when you assign the value to the dataSource the variable new_list has no value, try this way:

constructor(private newsService: Nobina2NewsesService) {
    this.getData();
}

getData(): void {
    this.newsService.v1Nobina2NewsesGet().subscribe(res => {
        this.new_list = res;
        this.setDataSource();
    }, err => {
        console.log(err); alert("Kolla nätverksanslutnignen(CORS)"); 
    });
}

setDataSource(): void {
    this.dataSource = new MatTableDataSource(this.news_list);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.