Dynamic table creation with ng-repeat in angularjs

前端 未结 3 1104
无人及你
无人及你 2021-01-06 09:31

I want to generate dynamic table with dynamic table header and row/columns according to json object comes from webapi.

Here are examples of json object whic

3条回答
  •  长发绾君心
    2021-01-06 09:56

    You can do this by using an ng-repeat inside another. And also, use the first line to render the headers.

    Note on ngRepeat: For some reason, angularjs@1.4.0 previous versions sorted the keys alphabetically when using ng-repeat by key in object. A simple way to fix that is upgrading to angularjs@^1.4.0 which is where they fixed it.

    Announce of this change by angular docs:

    You need to be aware that the JavaScript specification does not define the order of keys returned for an object. (To mitigate this in Angular 1.3 the ngRepeat directive used to sort the keys alphabetically.)

    Version 1.4 removed the alphabetic sorting. We now rely on the order returned by the browser when running for key in myObj. It seems that browsers generally follow the strategy of providing keys in the order in which they were defined, although there are exceptions when keys are deleted and reinstated. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_issues

    Ref.: Iterating over object properties

    The following snippet implements this solution.

    angular.module('myApp', [])
      .controller('myController', function($scope) {
        $scope.myArray = [
          { "CustomerName": "FORD", "Australia": 0, "China": 2, "India": 0, "South Korea": 0 },
          { "CustomerName": "ICICI PRUDENTIAL", "Australia": 0, "China": 0, "India": 5, "South Korea": 0 },
          { "CustomerName": "Kimberly Clark", "Australia": 0, "China": 0, "India": 0, "South Korea": 1 },
          { "CustomerName": "McDonalds", "Australia": 1, "China": 0, "India": 0, "South Korea": 0 },
          { "CustomerName": "Novartis", "Australia": 1, "China": 0, "India": 0, "South Korea": 0 },
          { "CustomerName": "Origin Energy", "Australia": 3, "China": 0, "India": 0, "South Korea": 0 }
        ];
      });
    
    angular.element(document).ready(function() {
      angular.bootstrap(document, ['myApp']);
    });
    table {
      border-collapse: collapse;
    }
    td,
    th {
      padding: 2px 4px;
    }
    
    
    {{ key }}
    {{ column }}

    The example bellow implements sorting columns dynamically by clicking on the column's header and also with reverse by clicking again on the selected column

    angular.module('myApp', [])
      .controller('myController', function($scope) {
      
        $scope.sortByColumn = 'CustomerName';
        $scope.sortByReverse = false;
        $scope.sortBy = function(column) {
          if (column === $scope.sortByColumn) {
            $scope.sortByReverse = !$scope.sortByReverse;
          } else {
            $scope.sortByReverse = false;
          }
    
          $scope.sortByColumn = column;
        };
        
        $scope.getSortColumn = function () {
          // it has to be like this, otherwize, the `orderBy sortByColumn`
          // breaks for special names like "South Korea"
          return '"' + $scope.sortByColumn + '"';
        };
        
        $scope.myArray = [
          { "CustomerName": "FORD", "Australia": 0, "China": 2, "India": 0, "South Korea": 0 },
          { "CustomerName": "ICICI PRUDENTIAL", "Australia": 0, "China": 0, "India": 5, "South Korea": 0 },
          { "CustomerName": "Kimberly Clark", "Australia": 0, "China": 0, "India": 0, "South Korea": 1 },
          { "CustomerName": "McDonalds", "Australia": 1, "China": 0, "India": 0, "South Korea": 0 },
          { "CustomerName": "Novartis", "Australia": 1, "China": 0, "India": 0, "South Korea": 0 },
          { "CustomerName": "Origin Energy", "Australia": 3, "China": 0, "India": 0, "South Korea": 0 }
        ];
      });
    
    angular.element(document).ready(function() {
      angular.bootstrap(document, ['myApp']);
    });
    table {
      border-collapse: collapse;
    }
    
    td,
    th {
      padding: 2px 4px;
    }
    
    [ng-click] {
      cursor: pointer;
    }
    
    
    {{ key }} {{ sortByReverse ? '▲' : '▼' }}
    {{ column }}

提交回复
热议问题