This is actually a bit difficult to do with Angular today, but you have a couple of options.
First, I think the most declarative solution would be to have a <tr> with the normal state, and a <tr> with the edit state:
<tr ng-show="edit"><td><input ng-model="model.name" ...
<tr ng-hide="edit"><td>{{model.name}} ...
the alternative (which actually is simpler) is to do this on the column <td>
<tr>
<td ng-show="edit"><input ng-model="model.name" ...
<td ng-hide="edit">{{model.name}} ...
</tr>
The reason this is simpler is that in the current version (1.0.x) of Angular you can only do ng-repeat on a single root element (although it looks like this will get changed in v 1.2.x: multi-element directives). Fortunately you're allowed to use multiple <tbody> tags in html, so this is actually valid:
<tbody ng-repeat="model in models">
<tr ng-show="edit"><td><input ng-model="model.name" ...
<tr ng-hide="edit"><td>{{model.name}} ...
<tbody>
Note that using ng-hide only hides the element from the dom. If you're concerned about performance (huge tables or mobile devices) ng-switch (or ng-if in 1.2.x) might be a better option as it removes the hidden part from the dom:
<tbody ng-repeat="model in models" ng-switch="row.edit" ng-init="row={}">
<tr ng-switch-when="true">
<td><input type="text" ng-model="model.customerId" disabled /></td>
<td><input type="text" ng-model="model.customerName" /></td>
<td ng-click="row.edit=false">done</td>
</tr>
<tr ng-switch-default>
<td>{{model.customerId}}</td>
<td>{{model.customerName}}</td>
<td ng-click="row.edit=true">edit</td>
</tr>
</tbody>
Update: I've added a third solution which uses ng-include:
This method is maybe not the most declarative, but it works pretty good. I've created two different row templates (these can be separate files or inlined as ng-templates as in my example), and then I use ng-include to switch between the two templates. Note that this works without the additional <tbody>:
<script type="text/ng-template" charset="utf-8" id="display.html">
<td>{{model.customerId}}</td>
<td>{{model.customerName}}</td>
<td ng-click="row.edit=true">edit</td>
</script>
<script type="text/ng-template" charset="utf-8" id="edit.html">
<td><input type="text" ng-model="model.customerId" disabled /></td>
<td><input type="text" ng-model="model.customerName" /></td>
<td ng-click="row.edit=false">done</td>
</script>
<table border="0">
<tr>
<th>CustomerId</th>
<th>CustomerName</th>
<th>Edit</th>
</tr>
<tr ng-repeat="model in models"
ng-include="{true:'edit.html',false:'display.html'}[row.edit]"
ng-init="row={edit:false}"></tr>
</table>
I've created a simple example using ng-switch and ng-show/hide: http://plnkr.co/edit/6kBPIT0Z07ti4BtnGrXj