Question: How would I use AngularJS `ng-repeat` to display the following HTML (Twitter Bootstrap Scaffolding)? Essentially, every third record I need to close the `</div>`, print an `<hr>`, then open another `<div class="span4">` 

```
    <div class="row">
      <div class="span4">
        <h3>
          Project A
        </h3>
      </div>
      <div class="span4">
        <h3>
          Project B
        </h3>
      </div>
      <div class="span4">
        <h3>
          Project C
        </h3>
      </div>
    </div>

    <hr>

    <div class="row">
      <div class="span4">
        <h3>
          Project D
        </h3>
      </div>
      <div class="span4">
        <h3>
          Lab Title
        </h3>
      </div>
      <div class="span4">
        <h3>
          Project E
        </h3>
      </div>
    </div>

```

I've created a fiddle for code demos.  

<http://jsfiddle.net/ADukg/261/>

Answer: 
A more elegant way is to use the view model to provide a chunked collection and then let the view handle it like

```
<div ng-controller="Controller">
    Projects <input ng-model="projects"></input>
    <hr/>
    <div ng-repeat="row in rows">
        <div ng-repeat="project in row">
            Projects {{project}}
        </div>
        <hr/>
    </div>
</div>​

```

and the coffeescript is pretty simple

```
# Break up an array into even sized chunks.
chunk = (a,s)->
    if a.length == 0
        []
    else               
        ( a[i..i+s-1] for i in [0..a.length - 1 ] by s)

@Controller = ($scope)->
    $scope.projects = "ABCDEF"

    $scope.$watch "projects", ->      
       $scope.rows = chunk $scope.projects.split(""), 3

angular.bootstrap(document, []);

```

​

<http://jsfiddle.net/ADukg/370/>
Moving on from [the more easy answer](https://stackoverflow.com/a/11058532/1447384). I dislike the original solution because of the empty dom elements it produces. This is for 3 divs per row.

```
<div ng-controller="ModulesCtrl">
    <div class="row" ng-repeat="i in fields.range()">
        <div class="span4" ng-repeat="field in fields.slice(i,i+3)">
            <h2>{{field}}</h2>
        </div>
    </div>
</div>

```

In function FieldsCtrl($scope):

```
$scope.fields.range = function() {
    var range = [];
    for( var i = 0; i < $scope.fields.length; i = i + 3 )
        range.push(i);
    return range;
}

```

If you know fields.length you can in place of fields.range() use [0,3,6,9] etc