在角度 2 中迭代 Ngfor 上的 json 对象

Posted

技术标签:

【中文标题】在角度 2 中迭代 Ngfor 上的 json 对象【英文标题】:iteration a json object on Ngfor in angular 2 【发布时间】:2016-09-22 17:30:56 【问题描述】:

我在 Ngfor 中迭代一个 json 对象时遇到问题,有我的模板:

模板:

<h1>Hey</h1>
  <div> people| json</div>
  <h1>***************************</h1>
  <ul>
    <li *ngFor="#person of people">
        
          person.label
        
    </li>
 </ul>

people 是我要迭代的 json 对象,我得到了 (people | json) 的结果,但没有得到列表,这是一个屏幕截图:

最后,这是 json 文件的一部分:


"actionList": 
"count": 35,
"list": [
    
    "Action": 
        "label": "A1",
        "HTTPMethod": "POST",
        "actionType": "indexation",
        "status": "active",
        "description": "Ajout d'une transcription dans le lac de données",
        "resourcePattern": "transcriptions/",
        "parameters": [
            
                "Parameter": 
                    "label": "",
                    "description": "Flux JSON à indexer",
                    "identifier": "2",
                    "parameterType": "body",
                    "dataType": "json",
                    "requestType": "Action",
                    "processParameter": 
                        "label": "",
                        "description": "Flux JSON à indexer",
                        "identifier": "4",
                        "parameterType": "body",
                        "dataType": "json",
                        "requestType": "Process"
                    
                
            ,

请随时帮助我

【问题讨论】:

【参考方案1】:

您的 people 对象不是数组,因此您可以开箱即用地对其进行迭代。

有两种选择:

您想迭代子属性。例如:

<ul>
  <li *ngFor="#person of people?.actionList?.list">
    
      person.label
    
  </li>
</ul>

您想遍历对象的键。在这种情况下,您需要实现一个自定义管道:

@Pipe(name: 'keys')
export class KeysPipe implements PipeTransform 
  transform(value, args:string[]) : any 
    if (!value) 
      return value;
     

    let keys = [];
    for (let key in value) 
      keys.push(key: key, value: value[key]);
     
    return keys;
   
 

并以这种方式使用它:

<ul>
  <li *ngFor="#person of people | keys">
    
      person.value.xx
    
  </li>
</ul>

查看此答案了解更多详情:

How to display json object using *ngFor

【讨论】:

非常感谢 thierry,我已经添加了你提到的管道,在我的模板中,我这样称呼它,但仍然没有得到任何东西: msg.value.Action.label // 例如获取每个动作节点下的所有标签 当我这样尝试时: obj.value.list[0].Action.label i我得到标签:A120,而不是第一个标签 A1,我得到的只是一个元素而不是列表,这正常吗?? 我尝试像这样添加索引,但没有成功: obj.value .list[i].Action.label // 我如何在列表中传递索引值??

以上是关于在角度 2 中迭代 Ngfor 上的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 ngFor 的帮助下迭代 Angular5 中的 JSON 数组

角度绑定到视图上的函数会导致对数据服务的无限调用

使用 ngFor 的角度动态表

如何使用包含键作为字符串和值作为映射迭代的ngFor循环映射进行迭代

如何使用 *ngFor 从对象角度获取值?

如何在角度模板中迭代字典?