2016-05-25 1 views
7

У меня возникли проблемы итерации объекта JSON в Ngfor, есть мой шаблон:итерация JSON объект на Ngfor в угловых 2

шаблон:

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

люди является объектом JSON, что я пытается итерация, у меня летящий результат (люди | 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" 
        } 
       } 
      }, 

пожалуйста, не стесняйтесь, чтобы помочь мне

ответ

12

Вашего 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> 
    

    Посмотреть этот ответ для более подробной информации:

+1

спасибо много thierry, Я добавляю трубку, как вы уже упоминали, в моем шаблоне я называю это так и ничего не получаю:

  • {{ msg.value.Action.label }}
  • // например, получить все ярлыки под каждым узлом действия – Anna

    +0

    , когда я пытаюсь это следующим образом:

  • {{ obj.value.list [0] .Action.label }}
  • Я получаю ярлык: A120, а не первый ярлык A1, и я получаю только один элемент, а не список, это нормально? – Anna

    +0

    Я попытался добавить индекс в него, как это, он не работал:

  • {{ obj.value.list [i] .Action.label }}
  • // как я могу передать значение индекса внутри списка? – Anna

    Смежные вопросы