Как использовать ngFor со сложным json в angular для рендеринга данных ul li

У меня есть простое представление html с некоторыми ul и li. Но мне нужно получить ту же структуру с ngfor, используя массив jsonarray в коде. Вот код ниже https://stackblitz.com/edit/angular-eigvsq?file=src%2Fapp%2Fapp.component .тс

app.component.html

<div>
  <ul>
    <h5>Red</h5>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <h5>Blue</h5>
    <li>4</li>
    <li>5</li>
    <li>6</li>
  </ul>
</div>

app.component.ts

import { Component, OnInit } from "@angular/core";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  name = "Angular";
  jsonarray = {
    id: "0001",
    Red: [
      { id: "1001", Order: 1 },
      { id: "1002", Order: 2 },
      { id: "1003", Order: 3 }
    ],
    Blue: [
      { id: "5001", Order: 4 },
      { id: "5002", Order: 5 },
      { id: "5005", Order: 6 }
    ]
  };

  ngOnInit() {}
}

Если вы знаете, что вам нужен ngFor, то почему вы не пишете с помощью ngFor? Или вы хотели, чтобы кто-то написал это для вас?

R. Richards 11.12.2020 20:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
381
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

<div>
    <ul>
        <ng-container *ngFor = "let data of jsonarray|keyvalue: originalOrder">
            <ng-container *ngIf = "data.key !== id">
                <h5>{{data.key}}</h5>
                <ng-container *ngFor = "let fields of data.value">
                    <li>{{fields.Order}}</li>
                </ng-container>
            </ng-container>
        </ng-container>
    </ul>
</div>

Рабочий стекблиц: -

https://stackblitz.com/edit/angular-ge4vjn?file=src/app/app.component.html

Ответ принят как подходящий

Во-первых, вам нужно оставить только те значения, которые вы хотите отобразить в шаблоне, я имею в виду удаление поля id: '0001' из вашего свойства jsonarray. Затем в шаблоне вы можете использовать keyvalue pipe:

  <ul>
    <ng-container *ngFor = "let item of jsonarray | keyvalue">
      <h5>{{item.key}}</h5>
      <li *ngFor = "let subItem of item.value">
        {{subItem.Order}}
      </li>
    </ng-container>
  </ul>

Другие вопросы по теме