2015-01-27 40 views
6

Innanzitutto, vorrei mostrare tutte le id denominate "main righe e nascondere tutte le id denominate "review" righe.Mostrare e nascondere le righe di tabella in angularjs

In secondo luogo, quando faccio clic su una riga "main, vorrei mostrare una riga "review" sotto questa riga "main.

Terzo passo, e poi quando si fa clic di nuovo su un altro "main fila, una fila "review" verrà mostrato in questo "main riga che ho cliccato, e la prima fila "review" devono essere nascosti.

In conclusione, mostrerà una sola fila "review" seconda del "main riga che ho cliccato, e nascondere tutte le altre righe "review" all'utente.

<tbody ng-repeat="(id,product) in products" ng-controller="ProductMainCtrl as main"> 
<tr id="main" ng-click="parseProductId(product.product_id)"> 
    <td>{{product.product_id}}</td> 
    <td>{{product.name}}</td> 
    <td>{{product.quantity}}</td> 
    <td>{{order.currency_code}} {{product.unit_price}}</td> 
    <td>{{order.currency_code}} {{product.unit_discount}}</td> 
    <td>{{order.currency_code}} {{product.price}}</td> 
    <td id="arrow"><a>Write A Review</a></td> 
</tr> 
<tr id="review"> 
    <td colspan="7"> 
    <span ng-include="'views/product/rating_main.html'"></span> 
    </td> 
</tr> 
</tbody> 

Posso ottenere qualche idea per questo con angolare?

+0

Non si può avere più ID con lo stesso nome; tuttavia, puoi avere più classi. Sembra che quello che stai descrivendo si chiami fisarmonica, probabilmente c'è un modulo angolare che puoi usare. So che Angular Bootstrap ne ha uno. http://angular-ui.github.io/bootstrap/ – Robert

+0

quello che probabilmente vuoi è 'ng-repeat-start' e' ng-repeat-end'. Che ti consentirebbe di inserire i dati in una riga e l'inclusione in un'altra, tutti all'interno dello stesso ambito figlio. Non pensare a ID in angolare, i modelli di dati guidano la manipolazione del DOM. Vuoi usare 'ng-show',' ng-hide', ecc. – charlietfl

+0

grazie per le tue idee – spider

risposta

9

È possibile aggiungere un ng-show per la tua opinione fila e giudice, che per indicare di quale riga vostro scatto con $index come:

<tbody ....> 
    ... 
    <tr id="review" ng-show'isShow == $index'> 
    <td colspan="7"> 
    <span ng-include="'views/product/rating_main.html'"></span> 
    </td> 
    </tr> 
    ... 
</tbody> 

e aggiungere una funzione di clic per cambiare isShow numero:

... 
<tr id="main" ng-click="parseProductId(product.product_id);changeShow($index)"> 
... 

Quindi definire la funzione changeShow nel controller:

$scope.changeShow = function(index){ 
    $scope.isShow = index; 
} 

Capito.

Un campione here

+0

Ora capito. Grazie mille :) – spider

+0

Grazie! Se si desidera nascondere nuovamente la riga espansa al clic: Impostare isShow su -1 se isShow === index – chrjs

Problemi correlati