对一组对象进行ng-repeat(使用ng-start)

时间:2016-05-13 01:21:39

标签: angularjs ng-repeat

我正在尝试显示一组对象。问题是我只能通过它的属性名称来访问数据。我想通过使用对象的密钥来迭代。

该对象有两个属性,每个属性代表一个开始时间和一个结束时间。它们将在每个单元格中显示。

我的表结构如下:

<table class="table table-striped">
    <tr>
      <th></th>
      <th ng-repeat="department in departments" style="vertical-align:top" colspan="2">{{department}}</th>
    </tr>
    <tr ng-repeat="time in times">
      <td>{{weekdays[$index]}}</td>
      <td ng-repeat-start="dept in time">{{times[$index].service.start}}</td>
      <td ng-repeat-end>{{times[$index].service.end}}</td>
    </tr>
</table>

在这种情况下,我该如何动态访问对象?

我的控制器:

.controller("businessHours", function($scope) {
  $scope.weekdays = ["Sunday", "Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];
  $scope.departments = ["sales", "service","accounting","bodyshop","other","parts"];

  $scope.times = [];
  $.each($scope.weekdays, function(index, value) {
    var dayTimes = {};
    $.each($scope.departments, function(index2, value){
        console.log(index)
      dayTimes[value] = {start: '5', end: '6'};
    });
    $scope.times.push(dayTimes);
  });


})

我是否正确地解决了这个问题,或者有更好的方法来安排我的数据结构?

1 个答案:

答案 0 :(得分:1)

在angular {/ p>中迭代(key,value) in ng-repeat

详细了解ng-repeat

  

<div ng-repeat="(key, value) in myObj"> ... </div>

在您的情况下,请更新您的html:

<td ng-repeat-start="(key,dept) in time">{{times[$index][key].start}}</td>
<td ng-repeat-end>{{times[$index][key].end}}</td>

angular.module('app', [])
  .controller('homeCtrl', function($scope) {
    $scope.weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
    $scope.departments = ["sales", "service", "accounting", "bodyshop", "other", "parts"];

    $scope.times = [];
    angular.forEach($scope.weekdays, function(v, i) {
      var dayTimes = {};
      angular.forEach($scope.departments, function(value, index) {
        console.log(index)
        dayTimes[value] = {
          start: '5',
          end: '6'
        };
      });
      $scope.times.push(dayTimes);
    });
  console.info($scope.times);
  });
td,tr {
  text-align:center;
  min-width: 20px;
}
<html>

<head>
  <title>Single Demo</title>
  <script src="//cdn.bootcss.com/jquery/2.2.1/jquery.js"></script>
  <script src="//cdn.bootcss.com/angular.js/1.4.7/angular.js"></script>

</head>

<body ng-app="app" ng-controller="homeCtrl">
  <div class="container">
    <table class="table table-striped">
      <tr>
        <th></th>
        <th ng-repeat="department in departments" style="vertical-align:top" colspan="2">{{department}}</th>
      </tr>
      <tr ng-repeat="time in times">
        <td>{{weekdays[$index]}}</td>
        <td ng-repeat-start="(key,dept) in time">{{times[$index][key].start}}</td>
        <td ng-repeat-end>{{times[$index][key].end}}</td>
      </tr>
    </table>
  </div>
</body>

</html>