Hi
I am getting error - TypeError: data.slice is not a function
at MatTableDataSource._orderData (table.mjs:1245:31)
at table.mjs:1213:93
at map.js:7:37
at OperatorSubscriber2._this._next (OperatorSubscriber.js:15:21)
at Subscriber2.next (Subscriber.js:34:18)
at combineLatest.js:47:40
at OperatorSubscriber2._this._next (OperatorSubscriber.js:15:21)
at Subscriber2.next (Subscriber.js:34:18)
at mergeInternals.js:25:28
at OperatorSubscriber2._this._next (OperatorSubscriber.js:15:21)
handleError @ core.mjs:6531
Show 1 more frame
Show less
import { Component,OnInit,ViewChild } from '@angular/core';
import {MatToolbarModule} from '@angular/material/toolbar';
import {MatIconModule} from '@angular/material/icon';
import {MatButtonModule} from '@angular/material/button';
import {MatDialog, MatDialogModule} from '@angular/material/dialog';
import { EmpAddEditComponent } from '../emp-add-edit/emp-add-edit.component';
import {MatPaginator, MatPaginatorModule} from '@angular/material/paginator';
import {MatSort, MatSortModule} from '@angular/material/sort';
import {MatTableDataSource, MatTableModule} from '@angular/material/table';
import {MatFormFieldModule} from '@angular/material/form-field';
import {MatInputModule} from '@angular/material/input';
import { Observable, throwError } from 'rxjs';
import { Injectable } from '@angular/core';
@Component({
selector: 'app-layout',
standalone: true,
imports: [MatFormFieldModule,MatIconModule,MatButtonModule,MatInputModule,MatToolbarModule,MatTableModule, MatSortModule, MatPaginatorModule],
templateUrl: './layout.component.html',
styleUrl: './layout.component.css'
})
export class LayoutComponent implements OnInit {
displayedColumns: string[] = ['id', 'empName', 'empContactNo', 'empEmail'];
dataSource!: MatTableDataSource;
@ViewChild(MatPaginator) paginator!: MatPaginator;
@ViewChild(MatSort) sort!: MatSort;
constructor(private _dialog:MatDialog){}
openAddEditForm(){
this._dialog.open(EmpAddEditComponent)
}
ngOnInit(): void {
this.getallEmployee();
}
getallEmployee() {
this.htp.get('onlinetestapi.gerasim.in/api/TeamSync/GetAllEmployee').subscribe((result: any)=>{
this.dataSource = new MatTableDataSource(result);
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
})
}
applyFilter(event: Event) {
const filterValue = (event.target as HTMLInputElement).value;
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}
}
Crud Application
Filter
ID
{{row.id}}
First Name
{{row.empName}}%
Contact No
{{row.empContactNo}}
Email
{{row.empEmail}}
No data matching the filter "{{input.value}}"
Thanks
Jithu ThomasPosted Jun 5, 2024, 2:16 PM
The error
TypeError: data.slice is not a functiontypically occurs when theMatTableDataSourceexpects an array but receives data of a different type. TheMatTableDataSourcerequires the data to be an array, but if it receives an object or another non-array type, it throws this error.Here is a checklist and a solution to fix the issue:
Check the API Response: Ensure that the API response is an array. If the API returns an object, you need to extract the array from it.
Inspect the API Call: Verify the structure of the API response. For example, if the API response is wrapped in an object, you need to access the array within it.
Modify the API Call in the Component: Update your
getallEmployeemethod to handle the API response correctly.Please modify the code as below: -
Also Ensure you have imported
HttpClientModulein your module: -