Угловая таблица материалов 12. [Источник данных] ошибка: Предоставленный источник данных не соответствует массиву, наблюдаемому или источнику данных

#angular #angular-material

Вопрос:

Мой rest Api возвращает { «идентификатор»: 1, «Идентификатор пользователя»: 1, «дата»: «2020-03-02T00:00:02.000 Z», «продукты»: [ { «Идентификатор продукта»: 1, «количество»: 4 }, { «Идентификатор продукта»: 2, «количество»: 1 }, { «Идентификатор продукта»: 3, «количество»: 6 } ], «__v»: 0 } и я пытаюсь реализовать таблицу угловых материалов, в которой отображается корзина пользователя, выбранного другой таблицей. Я создаю модуль материалов, сервис и интерфейс… Кто-нибудь может помочь мне понять, в чем причина ошибки здесь? Я всегда получаю эту ошибку в консоли: предоставленный источник данных не соответствует массиву, наблюдаемому или источнику данных.

 import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Cart } from '../interfaces/cart'; import { CartsService } from '../services/carts.service';   @Component({  selector: 'app-user-cart',  templateUrl: './user-cart.component.html',  styleUrls: ['./user-cart.component.css'] }) export class UserCartComponent implements OnInit {      carts!: Cart[];    displayedColumns: string[] = ['id','userId', 'date', 'products-id', 'products-quantity'];   constructor(  private cartsService: CartsService,  private route: ActivatedRoute  ) { }   ngOnInit(): void {  this.route.params.subscribe(response =gt; this.cartsService.getCart(response.id)  .subscribe(response =gt; this.carts = response)  );    }     }   
 lt;table mat-table [dataSource]="carts" class="mat-elevation-z8"gt;   lt;ng-container matColumnDef="id"gt;  lt;th mat-header-cell *matHeaderCellDefgt; Id lt;/thgt;  lt;td mat-cell *matCellDef="let cart"gt; {{cart.id}} lt;/tdgt;  lt;/ng-containergt;    lt;ng-container matColumnDef="userId"gt;  lt;th mat-header-cell *matHeaderCellDefgt; User Id lt;/thgt;  lt;td mat-cell *matCellDef="let cart"gt; {{cart.userId}} lt;/tdgt;  lt;/ng-containergt;    lt;ng-container matColumnDef="date"gt;  lt;th mat-header-cell *matHeaderCellDefgt; Date lt;/thgt;  lt;td mat-cell *matCellDef="let cart"gt; {{cart.date}} lt;/tdgt;  lt;/ng-containergt;    lt;ng-container matColumnDef="products-id"gt;  lt;th mat-header-cell *matHeaderCellDefgt; Product Id lt;/thgt;  lt;td mat-cell *matCellDef="let row"gt;  lt;span *ngFor="let item of row.products"gt;{{item.productId}}lt;/spangt;  lt;/tdgt;  lt;/ng-containergt;   lt;ng-container matColumnDef="products-quantity"gt;  lt;th mat-header-cell *matHeaderCellDefgt; Quantity lt;/thgt;  lt;td mat-cell *matCellDef="let row"gt;  lt;span *ngFor="let item of row.products"gt;{{item.quantity}}lt;/spangt;  lt;/tdgt;  lt;/ng-containergt;     lt;tr mat-header-row *matHeaderRowDef="displayedColumns"gt;lt;/trgt;  lt;tr mat-row *matRowDef="let row; columns: displayedColumns;"gt;  lt;/trgt;  lt;/tablegt; 
 export interface Cart {  id: number,  userId: number,  date: string,  products: Arraylt;{productId: number, quantity: number}gt;,  __v: number  } 

Комментарии:

1.Можете ли вы попробовать кастинг в качестве Cart[] .subscribe(response =gt; this.carts = response as Cart[])

Ответ №1:

Не уверен, что это может решить вашу проблему, но я не думаю, что в вашем источнике данных требуется список.

Я бы посоветовал вам попробовать заменить:

 carts!: Cart[];  

Автор: :

 public carts: MatTableDataSourcelt;Cartgt;;  

с соответствующим импортом, конечно: import { MatTableDataSource } from '@angular/material/table';

Ответ №2:

Инициализируйте корзину источников данных, как показано ниже

 carts = MatTableDataSourcelt;Cart[]gt;;  

импорт { MatTableDataSource } из ‘@угловой/материал/таблица’;