I thought I would add my answer, since no one raised a very important reason for these directives to be available. ng-repeat will not work correctly in certain scenarios when using html tables. Using ng-repeat-start is the only way to perform certain actions.
Imagine you want to display your data like this using html tables:

And this is your data set:
groups = [ { name: "Group 1", customers: [ {id: 123, name: "Foo Inc.", state: "NJ"}, {id: 234, name: "Bar Co.", state: "AZ"} ] }, { name: "Group 2", customers: [ {id: 345, name: "Baz LLC", state: "CA"} ] } ];
Using ng-repeat-start and ng-repeat-end , you can do this:
<table> <tr> <th>ID</th> <th>Customer</th> <th>State</th> </tr> <tr ng-repeat-start="group in groups"> <td colspan="3" style="text-align:center">{{group.name}}<td> </tr> <tr ng-repeat-end ng-repeat="customer in group.customers"> <td>{{customer.id}}</td> <td>{{customer.name}}</td> <td>{{customer.state}}</td> </tr> </table>
Pay attention to ng-repeat-end , and then to another regular ng-repeat . This ends the ng-repeat-start mapping, but initiates another repeat in the customers array, since we are still in the original ng-repeat-start scope when ng-repeat-end called, we still have access to the group object.
Keep in mind that this is a very trivial example, but as the table structure becomes more complex, the only way to achieve such things is to use ng-repeat-start and ng-repeat-end
jtate
source share