我有一项服务:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Color } from '../model/color';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ColorService {
  private productsUrl = 'http://localhost:5500/colors/';

  constructor(private http: HttpClient) { }

  getColors(): Observable<Color[]> {
    var colors = this.http.get<Color[]>(this.productsUrl + "all");
    
    return colors;
  }
}

以及获取此方法结果的组件:

ngOnInit(): void {
    this.colorsService.getColors()
        .subscribe((colors) => {
          this.colors = Object.values(colors);
          this.colors.sort((a,b) => a.name.localeCompare(b.name));
          console.log(colors);
        }, err => {
          this.displaySpinner = false;
        }, () => {
          this.displaySpinner = false;
        });
  }

我的 colored颜色 界面看起来像这样:

export interface Color {
    id: number;
    number: string;
    name: string;
    imagePath: string;
    category: string;
    color: string;
    brand: string;
}

现在,当我在组件中执行此控制台日志(log)时,它会给我一个名为Colors的数组,并将另一个包含实际数据的数组作为子数组:

{
  colors: [
    {
      id: 1,
      number: 159,
      name: 'glamorous peach',
      imagePath: '/src/assets/img/colors/color104.jpeg',
      category: 'summer',
      color: 'orange',
      brand: 'Pink Gellac'
    }
  ]
}

我似乎记得在以前版本的ANGLING中并非如此,当我在html页面中执行类似下面的操作时,它无法获得 colored颜色 .name,我认为这是因为这里发生了数组嵌套:

<mat-grid-tile *ngFor="let color of colors">
            <mat-card class="example-card"
                style="width: 95%; border-radius:15px; box-shadow: 4px 4px 6px -1px rgba(0,0,0,0.15);">
                <mat-card-content>
                    <mat-grid-list cols="1" rowHeight="250">
                        <mat-grid-tile class="tile" style="overflow:auto;">
                          <div class="wrapper">
                            <p>{{color.name}}</p>
                          </div>
                        </mat-grid-tile>
                      </mat-grid-list>
                </mat-card-content>
            </mat-card>
        </mat-grid-tile>

你知道怎么解决这个问题吗?由于在服务(Color[])中的输入,我似乎无法将此数组操作为ngFor工作所需的内容.

推荐答案

该 struct 来自API,您只需对其进行不同的设置即可使其正常工作!访问Colors数组并将其设置为变量!

ngOnInit(): void {
    this.colorsService.getColors()
        .subscribe((response: any) => {
          console.log(response);
          this.colors = <Array<Color>>response.colors;
          this.colors.sort((a,b) => a.name.localeCompare(b.name));
        }, err => {
          this.displaySpinner = false;
        }, () => {
          this.displaySpinner = false;
        });
  }

Angular相关问答推荐

如何在@angular/material-experimental中使用自定义调色板-Expeded $connect.Color.primary将成为有效的M3调色板

嵌套formArrays的HTML迭代

为什么这个拦截器只在发送事件上触发,而不是在实际响应上触发?

如何在HTML外部项目中使用Web组件(以17角创建)

带迭代的Angular 内容投影

我应该对我想要在我的Angular 17+组件中显示的任何变量使用信号吗?

Angular MSAL - 对 Bearer 令牌和 AUD 属性的怀疑

在生产模式下使用带Angular 的 livekit

包含与 ngFor 相关内容的 HTML 输入

显示 1 个数据而不是所有 ngFor - Angular 11

Angular 无法从后端获取数据到前端

在 angular2 中,如何获取在为 @Input 发送的对象上更改的属性的 onChanges

如何 use/import http模块?

Angular CLI 自定义 webpack 配置

由router-outlet 创建时如何将css类应用于组件元素?

在Angular 6 中找不到 HammerJS

Angular 2 可用的 yeoman 生成器

如何在Angular中使用带有 td 属性 colspan 的属性绑定?

我应该在 Angular 4+ 应用程序中 for each 组件创建一个模块吗?

如何从materialAngular使用分页器?