Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove whole table row angularjs button

Tags:

angularjs

I have a table with some sample data. I have a button that I want to use with in the table row that will remove the whole table row when clicked. Problem is what I have coded up will remove the content from the table row and leave the button and table row. Or it will remove the last table row not the row the button was clicked in.

Here is what I have :

controller :

    $scope.removeRow = function (product) {

    var index = -1;
    var productArray = eval($scope.products);

    for (var i = 0; i < productArray.legnth; i++) {
        if (productArray[i].productName == product.productName) {
            index = i;

        console.log(productArray[i].productName);
        }
    }
    if (index === -1) {
        alert("something broke");
    }

    $scope.products.splice(index, 1);
}

html

 <table class="table table-bordered table-hover">
                    <tr>
                        <!--<th><button class="btn btn-primary" type="button" data-ng-click="showImage = !showImage">{{showImage ? "Hide" : "Show"}} Image</button></th>-->
                        <th>Show or Hide </th>
                        <th>Product</th>
                        <th>Code</th>
                        <th>Avaiable</th>
                        <th>Price</th>
                    </tr>
                    <tr data-ng-repeat="product in products">
                        <td><input type="button" class="btn btn-primary" value="Hide" data-ng-click="removeRow(product)"/></td>
                        <td>{{product.productName}}</td>
                        <td>{{product.productCode}}</td>
                        <td>{{product.releaseDate}}</td>
                        <td>{{product.price | currency}}</td>
                    </tr>
                </table>
like image 223
Troy Bryant Avatar asked Dec 22 '14 19:12

Troy Bryant


People also ask

How to delete a row on button click in Angular?

Here on click of delete button our deleteRow() function gets fire and using splice we remove the selected rows. Conclusion: Directive ng-repeat is used to Bind data to our HTML table. Directive ng-click is applied on the Delete button which fires deleteRow() function. And with splice remove the selected row.


2 Answers

You can use $index in the template, like so in order to get the index of the product array.

<td><input type="button" data-ng-click="removeRow($index)"/></td>

Then in the controller, do something like this:

$scope.removeRow = function (idx) {
  $scope.products.splice(idx, 1);
};
like image 153
reptilicus Avatar answered Sep 28 '22 07:09

reptilicus


Check out this potential solution / correct syntax / strategy to your problem: http://plnkr.co/edit/Z3NTKo?p=preview

You might consider getting the products index from the ng-repeat, this would make your code a lot simpler and should work:

<table class="table table-bordered table-hover">
    <tr>
        <th>Show or Hide </th>
        <th>Product</th>
        <th>Code</th>
        <th>Avaiable</th>
        <th>Price</th>
    </tr>
    <tr data-ng-repeat="(productIndex, product) in products">
        <td><input type="button" class="btn btn-primary" value="Hide" data-ng-click="removeRow(productIndex)"/></td>
        <td>{{product.productName}}</td>
        <td>{{product.productCode}}</td>
        <td>{{product.releaseDate}}</td>
        <td>{{product.price | currency}}</td>
    </tr>
</table>


$scope.removeRow = function (productIndex) {
    $scope.products.splice(productIndex, 1);
}
like image 40
user12121234 Avatar answered Sep 28 '22 05:09

user12121234