У меня есть одна таблица, и мне нужно, когда серийный номер будет выше 10, он снова перейдет к следующему столбцу, серийный номер начнется с 11.

Вот мой код:

 <table class="table table-bordered table-striped table-hover" id="dataTable" >
    <colgroup>
       <col class="col-md-1 col-sm-1">
       <col class="col-md-4 col-sm-4">
    </colgroup>
    <thead>
       <tr>
          <th>Sl. No</th>
          <th>Generated Code</th>
       </tr>
    </thead>
    <tbody id="detailsstockid">
        <tr ng-repeat="c in listOfViewCode">
            <td>{{$index+1}}</td>
            <td>{{c.generated_code}}</td>
        </tr>
    </tbody>
</table>

На самом деле мне нужен следующий формат.

sl no  Generated Code  sl no  Generated Code

1          aaa          11        ssss

2          sss          12        gggg
3          eee
4          cccc
5          tttt
6          bbbb
7          nnnn
8          nnnn
9          bbbb
10         cccc

Новая_таблица :

<table class="table table-bordered table-striped table-hover" id="dataTable" ng-repeat="group in groups" style="float:left" >
<colgroup>
<col class="col-md-1 col-sm-1">
<col class="col-md-3 col-sm-3">
</colgroup>
<thead>
 <tr>
<th>Sl. No</th>
<th>Generated Code</th>
</tr>
</thead>
<tbody id="detailsstockid">
<tr ng-repeat="g in group.values">
<td>{{$parent.$index * 10 + $index +  1}}</td>
<td>{{g.generated_code}}</td>
</tr>

</tbody>
</table>

Предположим, у меня нет 100 данных. Когда серийный номер пересечет 10, он сместится вправо с теми же двумя столбцами и так далее. Я использую Angular.js.

5
satya 16 Дек 2015 в 09:44

5 ответов

Лучший ответ

Другой способ сделать это, который будет работать для любого количества столбцов от 1 до 10, - это сделать что-то вроде:

var newList = [];
for(var i = 0; i<listOfViewCode.length; i++) {
    var index = i+1;
    var listIndex = (i%10);
    var row = newList[listIndex];
    if(row == null) {
        row = [];
    }
    listOfViewCode[i].index = index;

    row.push(listOfViewCode[i]);
    newList[listIndex] = row;
}

А затем используйте ng-repeat-start для рендеринга.

<tr ng-repeat="c in newList">
    <td ng-repeat-start="p in c">{{p.index}}</td>
    <td ng-repeat-end>{{p.generated_code}}</td>     
</tr>
2
Christian Nielsen 16 Дек 2015 в 08:15

Я бы предложил сделать две таблицы, так как похоже на то, что вы действительно делаете. Так что сделайте функцию, которая дает вам элементы 1-10 и одну, которая дает вам 10 и выше, а затем просто сделайте, как вы уже делаете.

В качестве альтернативы, если вы действительно хотите, чтобы они были в одной таблице, вы могли бы создать массив, содержащий массив элементов для каждой строки - таким образом, элементы, которые являются одинаковыми, когда элемент% 10. Например, что-то вроде.

var newList = [];
for(var i = 0; i<listOfViewCode; i++) {
    var index = i+1;
    var row = newList[i%10];
    if(row == null) {
        row = [];
    }
    row.push(listOfViewCode[i]);
    newList[i%10] = row;
}

И тогда у вас есть только вложенный ng-repeat в ng-repeat и рендеринг их.

Обновление: как то так

Это могло быть что-то вроде

<tr ng-repeat="c in newList">
    <td>{{$index+1}}</td>
    <td>{{c[0].generated_code}}</td>
    <td>{{$index+11}}</td>
    <td>{{c[1].generated_code}}</td>
</tr>
0
Christian Nielsen 16 Дек 2015 в 08:38

Итак, лучшее, что я мог придумать, это создать несколько таблиц и использовать css, чтобы создать видимость одной таблицы ...

Вот плункер: http://plnkr.co/edit/ZQ1NpOa96IpzSncbFSud?p=preview

В вашем шаблоне что-то вроде этого:

<table ng-repeat="group in groups" style="float: left">
  <thead>
    <tr>
      <th><b>Sl. No</b></th>
      <th><b>Generated Code</b></th>
    </tr>
  </thead>
  <tr ng-repeat="g in group.values">
    <td>{{$parent.$index * 10 + $index +  1}}</td>
    <td>{{g.value}}</td>
  </tr>
</table>

Затем нам нужно разбить ваши данные на куски и назначить их «группе» ... поэтому в контроллере мы делаем что-то вроде этого:

var items = [{value: 'bbb'},{value: 'bbb'},{value: 'bbb'},{value: 'bbb'},{value: 'bbb'},{value: 'aaa'},{value: 'aaa'},{value: 'aaa'},{value: 'aaa'},{value: 'aaa'},{value: 'ccc'},{value: 'ccc'},{value: 'ccc'},{value: 'ccc'},{value: 'ccc'},{value: 'ddd'},{value: 'ddd'},{value: 'ddd'},{value: 'ddd'},{value: 'ddd'},{value: 'eee'},{value: 'eee'},{value: 'eee'},{value: 'eee'},{value: 'eee'},{value: 'fff'},{value: 'fff'},{value: 'fff'},{value: 'fff'},{value: 'fff'},{value: 'ggg'},{value: 'ggg'},{value: 'ggg'},{value: 'ggg'},{value: 'ggg'},{value: 'hhh'},{value: 'hhh'},{value: 'hhh'},{value: 'hhh'},{value: 'hhh'},{value: 'iii'},{value: 'iii'},{value: 'iii'},{value: 'iii'},{value: 'iii'}];

$scope.groups = [];

// break the data into chunks of 10
var i,j,temparray,chunk = 10;
for (i=0,j=items.length; i<j; i+=chunk) {
    temparray = items.slice(i,i+chunk);
    $scope.groups.push({values: temparray});
}

Это создаст таблицы по 10 строк в каждой (последняя из которых будет содержать оставшиеся строки), бок о бок (используя style = "float: left") ... лучше всего я могу придумать. Надеюсь, поможет!

2
mkelley82 16 Дек 2015 в 09:01

Пожалуйста, посмотрите код ниже:

Код-:

<div ng-controller="MyCtrl">

<table  id="dataTable" style="float: left;"  ng-repeat="c in [0,10,20,30,40,50,60,70,80,90]" ng-init="newlist=listOfViewCode.slice(c,c+10)">
    <colgroup>
       <col >
       <col>
    </colgroup>
    <thead>
       <tr>
          <th>Sl. No</th>
          <th>Generated Code</th>
       </tr>
    </thead>
    <tbody id="detailsstockid">
        <tr ng-repeat="c in newlist">
            <td>{{$index+c}}</td>
            <td>{{c}}</td>
        </tr>
    </tbody>
</table>

</div>

Код контроллера:

var myApp = angular.module('myApp',[]);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {
$scope.listOfViewCode=[];
for(var i=0;i<100;i++)
{
$scope.listOfViewCode[i]=i+1;
}
}

Я только что показал пример, который поможет вам реализовать то, что вы пытаетесь сделать. Надеюсь, это поможет.

0
Deep 16 Дек 2015 в 07:51

Вот пример, который в основном включает в себя сохранение данных в виде n x 10 матрицы и использование вложенных циклов для выполнения корректировок.

http://jsfiddle.net/gwfPh/15/

Обратите внимание, что в контроллере данные хранятся в измененном виде.

0
a_pradhan 16 Дек 2015 в 07:40