Подтвердить что ты не робот

Angularjs - ng-repeat: ключ доступа и значение из объекта массива JSON

У меня есть объект JSON Array, как показано ниже.

$scope.items = 
    [
    {Name: "Soap",  Price: "25",  Quantity: "10"},
    {Name: "Bag",   Price: "100", Quantity: "15"},
    {Name: "Pen",   Price: "15",  Quantity: "13"}
];

Я хочу получить ключи и значения отдельно, используя ng-repeat в angular.js. Я пробовал следующий код, но не работал.

<tr ng-repeat="(key, val) in items">
  <td>{{key}}</td> 
  <td>{{val}}</td>
 </tr> 

Я считаю, что проблема связана с фигурными скобками ['и'] '. Кто-нибудь может предложить мне, как можно решить проблему?

Отредактировано:

Большое вам спасибо за ответ. Я пробовал свой код и его работу. Но мое реальное требование - отображать элементы, как показано ниже.

Name     Price  Quantity
Soap        25  10
Bag        100  15
Pen         15  13

Я использую некоторые <tr> и <td> в html. Но ничего не отображается на экране. Коды показаны ниже.

<table>  
 <tr ng-repeat="item in items">
  <tr ng-repeat="(key, val) in item">
      <td>{{key}}</td>
      <td>{{val}}</td>
  </tr>
</tr> 
</table>

Я знаю, что <tr> внутри другого <tr> не разрешен html. Я пробовал лучше. Но не повезло. Будет здорово, если вы сможете мне помочь в этом. Спасибо заранее.

4b9b3361

Ответ 1

У вас есть массив объектов, поэтому вам нужно использовать ng-repeat дважды, например:

<ul ng-repeat="item in items">
  <li ng-repeat="(key, val) in item">
    {{key}}: {{val}}
  </li>
</ul>

Пример: http://jsfiddle.net/Vwsej/

Изменить:

Обратите внимание, что порядок свойств объектов не гарантируется.

<table>
    <tr>
        <th ng-repeat="(key, val) in items[0]">{{key}}</th>
    </tr>
    <tr ng-repeat="item in items">
        <td ng-repeat="(key, val) in item">{{val}}</td>
    </tr>
</table>

Пример: http://jsfiddle.net/Vwsej/2/

Ответ 2

Я только что начал проверять Angular (поэтому я уверен, что есть другие способы сделать это, которые являются более оптимальными), и я столкнулся с этим вопросом, ища примеры ng-repeat.

Требование к вопросу (с обновлением):

"... но мое реальное требование отображает элементы, как показано ниже.."

выглядел реальным миром достаточно (и просто), поэтому я подумал, что плохо дал ему вращение и попытался получить нужную структуру.

angular.module('appTest', [])
  .controller("repeatCtrl", function($scope) {
    $scope.items = [{
      Name: "Soap",
      Price: "25",
      Quantity: "10"
    }, {
      Name: "Bag",
      Price: "100",
      Quantity: "15"
    }, {
      Name: "Pen",
      Price: "15",
      Quantity: "13"
    }];
  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="appTest">
  <section ng-controller="repeatCtrl">
    <table>
      <thead>
        <tr ng-repeat="item in items | limitTo:1">
          <th ng-repeat="(key, val) in item">
            {{key}}
          </th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="item in items">
          <td ng-repeat="(key, val) in item">
            {{val}}
          </td>
        </tr>
      </tbody>
    </table>
  </section>
</body>

Ответ 3

Решение У меня есть объект json, который имеет данные

[{"name":"Ata","email":"[email protected]"}]

Вы можете использовать следующий подход для итерации через ng-repeat и использовать формат таблицы вместо списка.

<div class="container" ng-controller="fetchdataCtrl">    
  <ul ng-repeat="item in numbers">
    <li>            
      {{item.name}}: {{item.email}}
    </li>
  </ul>     
</div>

Ответ 4

попробуйте это.

<tr ng-repeat='item in items'>
<td>{{item.Name}}</td>
<td>{{item.Price}}</td>
<td>{{item.Quantity}}</td>
</tr>