Как получить значения ng-repeat по столбцам и столбцам из таблицы

Лучшее решение, которое сработало для меня, это:

private static int findDaysDiff(long unixStartTime,long unixEndTime)
    {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTimeInMillis(unixStartTime);
        calendar1.set(Calendar.HOUR_OF_DAY, 0);
        calendar1.set(Calendar.MINUTE, 0);
        calendar1.set(Calendar.SECOND, 0);
        calendar1.set(Calendar.MILLISECOND, 0);

        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTimeInMillis(unixEndTime);
        calendar2.set(Calendar.HOUR_OF_DAY, 0);
        calendar2.set(Calendar.MINUTE, 0);
        calendar2.set(Calendar.SECOND, 0);
        calendar2.set(Calendar.MILLISECOND, 0);

        return (int) ((calendar2.getTimeInMillis()-calendar1.getTimeInMillis())/(24 * 60 * 60 * 1000));

    }

Поскольку он сначала преобразует Hour, Minute, Second и Millisecond в 0, и теперь разница будет быть только в днях.

1
задан Clint_A 13 July 2018 в 12:36
поделиться

2 ответа

С вашим блоком checkboxes сложно работать. Так что это просто требует перестановки. Начните с 2D-массива флажков и заполните все значения false. Затем пройдите через известные флажки и найдите их индекс для строк и столбцов, а затем просто покажите его с помощью ng-model="checkboxes[$parent.$index][$index]".

Вот моя версия в качестве демонстрации:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  var n = $scope.names = [
    {name_id:10, name:"Micheal"},
    {name_id:20, name:"James"},
    {name_id:30, name:"Peter"},
    {name_id:40, name:"Eddy"}
  ];
  var c = $scope.cols = [
    {col_id:1},
    {col_id:2},
    {col_id:3},
    {col_id:4},
    {col_id:5}
  ];

  var checked_boxes = [
    {name_id:10, col_id:2},
    {name_id:20, col_id:1},
    {name_id:30, col_id:4}
  ];
  
  $scope.checkboxes = n.map( function(x) {
    return c.map( function(y) { 
      return false;
    });
  })
  
  for(var i=0; i<checked_boxes.length; i++){
    var ni = n.map(function(_) { return _.name_id; }).indexOf(checked_boxes[i].name_id); // match the index of `name_id`
    var ci = checked_boxes[i].col_id-1; // or like above -> c.map(...).indexOf(...) // but for `col_id`
    $scope.checkboxes[ni][ci] = true;
  }
  
});
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<body>

  <div ng-app="myApp" ng-controller="myCtrl">

    <table>
      <tr ng-repeat="item in names track by $index">
        <td>{{item.name}}</td>
        <td ng-repeat="col in cols">
          <input type="checkbox" value="" class="form-control" ng-model="checkboxes[$parent.$index][$index]" />
        </td>
      </tr>
    </table>

  </div>

</body>

</html>

1
ответ дан Aleksey Solovey 17 August 2018 в 12:51
поделиться

Я сделал вам небольшой пример, чтобы вы могли сделать это проще. Мое предложение следующее:

  • Вместо использования ng-model в ваших флажках вы можете изменить на ng-click, чтобы установить значение в вашем массиве данных, что упростит, если вы хотите собрать это информацию позже.
    <div ng-app="questions">
         <div  ng-controller="QuestionController as ctrl">
         <table>
             <thead>
               <tr>
                <th>Name</th>
                <th>A</th>
                <th>B</th>
                <th>C</th>
                <th>D</th>
                <th>E</th>
               </tr>
             </thead>
             <tbody>
               <tr ng-repeat="item in ctrl.questions track by $index">
                  <td id="{{item.name_id}}">{{item.name}}</td>
                    <td ng-repeat="col in ctrl.cols">
                       <input type="checkbox" class="form-control" ng-click="ctrl.selectOption(item, col)"/>
                    </td>
               </tr>
             </tbody>
          </table>
         <button ng-click="ctrl.load()">
              Load button data
         </button>
         </div>
    </div>
    
  • И в вашем javascript у вас будет следующее:
    angular.module('questions', []);
    angular.module('questions').controller('QuestionController', QuestionController);
    
    function QuestionController () {
      var ctrl = this;
      ctrl.questions = [{
        name: 'Name 1',
        name_id: 'Name_1',
        selectedOption: ''
      },{
        name: 'Name 2',
        name_id: 'Name_2',
        selectedOption: ''
      },{
        name: 'Name 3',
        name_id: 'Name_3',
        selectedOption: ''
      }];
    
      ctrl.cols = ['A', 'B', 'C', 'D', 'E'];
    
      ctrl.selectOption = function (entry, selectedOption) {
        entry.selectedOption = selectedOption;
      };
    
      ctrl.load = function () {
        angular.forEach(ctrl.questions, function (question) {
          console.log('Name: ' + question.name + ' - Answer: ' + question.selectedOption);
        });
      }
    
    }
    
1
ответ дан Luiz Carlos 17 August 2018 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: