2015-01-27 15 views
6

Zuerst möchte ich alle ID-Namen "main Zeilen zeigen und alle ID mit Namen "review" Zeilen ausblenden.Anzeigen und Ausblenden von Tabellenzeilen in angularjs

Zweitens, wenn ich auf eine "main Zeile klicke, würde ich gerne eine "review" Zeile unter dieser "main Zeile anzeigen.

Dritter Schritt, und wenn ich dann wieder Sie auf einem anderen "main Reihe, eine "review" Reihe wird im Rahmen dieser "main Zeile angezeigt werden, die ich angeklickt, und die erste "review" Zeile sollen versteckt werden.

Zusammenfassend, ich werde nur eine "review" Zeile zeigen, abhängig von der "main Zeile, die ich geklickt habe, und ausblenden Sie alle anderen "review" Zeilen an Benutzer.

<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> 

Könnte ich ein paar Ideen dafür mit eckigen bekommen?

+0

Sie können nicht mehrere IDs mit dem gleichen Namen haben; Sie können jedoch mehrere Klassen haben. Es klingt, was du beschreibst, heißt Akkordeon, es gibt wahrscheinlich ein Winkelmodul, das du benutzen kannst. Ich weiß, dass Angular Bootstrap einen hat. http://angular-ui.github.io/bootstrap/ – Robert

+0

Was Sie wahrscheinlich wollen, ist 'ng-repeat-start' und' ng-repeat-end'. Damit können Sie Daten in einer Zeile und das Include in einer anderen Zeile innerhalb des gleichen untergeordneten Bereichs platzieren. Denken Sie nicht an IDs in eckigen, die Datenmodelle steuern DOM-Manipulation. Sie möchten 'ng-show',' ng-hide' usw. verwenden – charlietfl

+0

danke für Ihre Ideen – spider

Antwort

9

Sie können eine ng-show auf einen Beitrag Reihen- und beurteil, die mit $index wie durch welche Zeile Sie hier klicken, um zu zeigen:

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

und eine Klick-Funktion hinzufügen isShow Nummer zu ändern:

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

Dann definieren Sie changeShow Funktion in der Steuerung:

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

Verstanden.

Eine Probe here

+0

Jetzt haben Sie es. Vielen Dank :) – spider

+0

Danke! Wenn Sie die erweiterte Zeile beim Klicken erneut ausblenden möchten: Setzen Sie isShow auf -1, wenn isShow === index – chrjs