How to iterate over the keys and values with ng-repeat in AngularJS?

后端 未结 9 1654
抹茶落季
抹茶落季 2020-11-22 04:36

In my controller, I have data like: $scope.object = data

Now this data is the dictionary with keys and values from json.

I can acce

相关标签:
9条回答
  • 2020-11-22 04:47

    Complete example here:-

    <!DOCTYPE html >
    <html ng-app="dashboard">
    <head>
    <title>AngularJS</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    <link rel="stylesheet" href="./bootstrap.min.css">
    <script src="./bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
    </head>
    <body ng-controller="myController">
        <table border='1'>
            <tr ng-repeat="(key,val) in collValues">
                <td ng-if="!hasChildren(val)">{{key}}</td>  
                <td ng-if="val === 'string'">
                    <input type="text" name="{{key}}"></input>
                </td>
                <td ng-if="val === 'number'">
                    <input type="number" name="{{key}}"></input>
                </td>
                <td ng-if="hasChildren(val)" td colspan='2'>
                    <table border='1' ng-repeat="arrVal in val">
                        <tr ng-repeat="(key,val) in arrVal">
                            <td>{{key}}</td>    
                            <td ng-if="val === 'string'">
                                <input type="text" name="{{key}}"></input>
                            </td>
                            <td ng-if="val === 'number'">
                                <input type="number" name="{{key}}"></input>
                            </td>
                        </tr>
                    </table>                
                </td>
    
            </tr>       
        </table>
    </body>
    
    <script type="text/javascript">
    
        var app = angular.module("dashboard",[]);
        app.controller("myController",function($scope){
            $scope.collValues = {
                'name':'string',
                'id':'string',
                'phone':'number',
                'depart':[
                        {
                            'depart':'string',
                            'name':'string' 
                        }
                ]   
            };
    
            $scope.hasChildren = function(bigL1) {
                return angular.isArray(bigL1);
    } 
        });
    </script>
    </html>
    
    0 讨论(0)
  • 2020-11-22 04:50

    Here's a working example:

    <div class="item item-text-wrap" ng-repeat="(key,value) in form_list">
      <b>{{key}}</b> : {{value}}
    </div>
    

    edited

    0 讨论(0)
  • 2020-11-22 04:52

    How about:

    <table>
      <tr ng-repeat="(key, value) in data">
        <td> {{key}} </td> <td> {{ value }} </td>
      </tr>
    </table>
    

    This method is listed in the docs: https://docs.angularjs.org/api/ng/directive/ngRepeat

    0 讨论(0)
  • 2020-11-22 04:58

    You can do it in your javascript (controller) or in your html (angular view)...

    js:

    $scope.arr = [];
    for ( p in data ) {
      $scope.arr.push(p); 
    }
    

    html:

    <tr ng-repeat="(k, v) in data">
        <td>{{k}}<input type="text" ng-model="data[k]"></td>
    </tr>
    

    I believe the html way is more angular , but you can also do in your controller and retrieve it in your html...

    also not a bad idea to look at the Object keys, they give you the an array of the keys if you need them, more info here:

    https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

    0 讨论(0)
  • 2020-11-22 05:04
        Use below code it is working to display your key and value here is key start with 1:
             <tr ng-repeat="(key,value) in alert_list" >
                       <td>{{key +1}}</td>
                       <td>{{value.title}}</td>
                     </tr>
    Below is document link for it. 
    

    https://docs.angularjs.org/api/ng/directive/ngRepeat

    0 讨论(0)
  • 2020-11-22 05:06

    A todo list example which loops over object by ng-repeat:

    var app = angular.module('toDolistApp', []);
    app.controller('toDoListCntrl', function() {
      var self = this;
      self.toDoListItems = {};// []; //dont use square brackets if keys are string rather than numbers.
      self.doListCounter = 0;
    
      self.addToDoList = function() {		  		   
        var newToDoItem = {};
        newToDoItem.title     = self.toDoEntry;
        newToDoItem.completed = false;		   
    
        var keyIs = "key_" + self.doListCounter++;  		   
    
        self.toDoListItems[keyIs] = newToDoItem;		   
        self.toDoEntry = ""; //after adding the item make the input box blank.
      };
    });
    
    app.filter('propsCounter', function() {
      return function(input) {
        return Object.keys(input).length;
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <body ng-app="toDolistApp">    
      <div ng-controller="toDoListCntrl as toDoListCntrlAs">
        Total Items: {{toDoListCntrlAs.toDoListItems | propsCounter}}<br />
        Enter todo Item:  <input type="text" ng-model="toDoListCntrlAs.toDoEntry"/>
        <span>{{toDoListCntrlAs.toDoEntry}}</span>
        <button ng-click="toDoListCntrlAs.addToDoList()">Add Item</button> <br/>
        <div ng-repeat="(key, prop) in toDoListCntrlAs.toDoListItems"> 
          <span>{{$index+1}} : {{key}}   : Title = {{ prop.title}} : Status = {{ prop.completed}} </span>
        </div>     
      </div>    
    </body>

    0 讨论(0)
提交回复
热议问题