繁体   English   中英

如何在 angular 8 中将 object 数组的键操作到 ngfor 中

[英]How to manipulate the key of array of object into ngfor in angular 8

我有一个对象数组,需要根据 static html 使用 ngFor 进行操作。我已经尝试过但没有工作,所以我评论了。“mainitem”的值将作为标题出现,“Seconditem”的键将出现在 li 标签内.这是下面的代码和演示https://stackblitz.com/edit/angular-eigvsq?file=src%2Fapp%2Fapp.component.ts

app.component.html

 <!--
    <div>
        <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>
    </div>
     -->
    <div>
        <ul>
            <h5>My item 1</h5>
            <li>createddate</li>
            <li>enddate</li>
            <h5>My item 2</h5>
            <li>origindate</li>
            <li>startdate</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 = [
    {
      mainitem: "My item 1",
      Seconditem: {
        createddate: "30-01-02",
        enddate: "30-01-03"
      }
    },
    {
      mainitem: "My item 2",
      Seconditem: {
        origindate: "30-01-04",
        startdate: "30-01-05"
      }
    }
  ];

  ngOnInit() {}
}

我不确定这一点,我在您的代码中发现了一些问题,例如:

<li *ngFor="let subItem of item.value">
  {{subItem.Order}}
</li>

我似乎无法在您的项目中找到item.value.Order

但我认为你想多了。 (我认为)

尝试这个:

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

这是一个可以使用的模板:

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

链接到工作 stackblitz: https://stackblitz.com/edit/angular-uc15fx?file=src%2Fapp%2Fapp.component.html

试试这个。 我提供了两种用于渲染内部 li 的选项 您可以选择适合您需要的一种。

HTML

 <ng-container *ngFor="let item of jsonarray"> <h5>{{item.mainitem}}</h5> <li *ngFor="let key of getKeys(item.Seconditem)"> {{item.Seconditem[key]}} </li> <br> <li *ngFor="let value of getValues(item.Seconditem)"> {{value}} </li> </ng-container>

在 TS 中添加这些功能

 public getKeys(data){ return Object.keys(data); } public getValues(data){ return Object.values(data); }

我在这里展示的方法使您的 HTML 超级简单和易于管理,并且通常是处理具有非统一键的 JSON 对象的推荐方法。 因为,它总是建议使用JS 进行数据操作,让 HTMl只处理 display 此外,我们使用Object class 这是 Javascript 本身提供的超级强大的工具。 它带有大量其他有用的函数(entries() 是另一个很棒的 function,它以数组的形式返回键和值!这对你也很有用)。 https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Object


希望这可以帮助。 如果您有任何问题或疑问,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM