2016-04-27 10 views
1

このダウンは自分のHTMLコードからは小さいです。コードは動的な行を追加/削除します。Angularjs:ダイナミックテーブルの行を削除するにはどうすればいいですか?配列から削除しないでください

<tr class="clone" ng-repeat="dataItem in dataInvoce.Invoicetoitem.items track by $index"> 
       <td class="number">{{$index + 1}}</td> 
    <td><input type="text" id="codeto{{$index}}" size="11" ng-model="dataItem.item.code" ng-keyup="getCodeItem($index)" class="tagsItem"> 
       <td><input type="hidden" id="hidden{{$index + 1}}" ng-model="dataItem.item.itemID" > 
        <input type="text" ng-model="dataItem.item.itemName" id="item{{$index}}" class="tagsItem" ng-keyup="getItemInvoice($index)" name="itemName" required></td> 
       <td><input type="text" ng-model="dataItem.item.solid" size="11" id="solid{{$index + 1}}" ng-disabled="invoice.itemName.$error.required" required></td> 
       <td><input type="text" ng-model="dataItem.quantity" id="quantity{{$index+1}}" ng-keyup="totals($index+1)" size="10" ng-disabled="invoice.itemName.$error.required" required></td> 
       <td><input type="text" ng-model="dataItem.price" ng-keyup="totals($index+1)" value="111" id="price{{$index + 1}}" ng-disabled="invoice.itemName.$error.required" required></td> 
    <td><input type="text" ng-model="dataItem.discount" id="discount{{$index+1}}" ng-keyup="totals($index+1)" size="11" ng-disabled="invoice.itemName.$error.required" required></td> 
       <td>{{dataItem.quantity * dataItem.price * (1 - dataItem.discount/100) | number:2}}</td> 
       <td><a class="btn btn-default" ng-click="removeItem ($index)">-</a></td> 

      </tr> 

これは私のすべての項目の配列から「removeItem」ボタンremoven行をクリックしますが、とremoven要素row.When削除力学のための私のfuncitonです。 dynamicla行を削除したいが、すべての項目で配列から要素を削除しないでください。

$scope.removeItem = function (index) 
{ 
console.log($scope.dataInvoce.Invoicetoitem.items); 

$scope.dataInvoce.Invoicetoitem.items.splice (index, 1); 

console.log($scope.dataInvoce.Invoicetoitem.items); 
$scope.total ($scope.dataInvoce.Invoicetoitem.items); 
}; 
+0

を渡す設定。 –

+0

あなたは単にcss display = noneを行に追加するか、@SSHがng-showまたはng-hideをどのようにしたかを入力することができます。 –

+0

Ng-show削除する行をどのように知っていますか? –

答えて

1

ため

参照

ng-click="removeItem (dataItem)" <!-- Instead of '$index' --> 

そして、コントローラー機能を変更してください。

$scope.removeItem = function (dataItem) { 
    console.log($scope.dataInvoce.Invoicetoitem.items); 
    dataItem.deleted = true; 
    var total = $scope.dataInvoce.Invoicetoitem.items.filter(function(item) { return typeof(item.deleted) === 'undefined' || !item.deleted; }); // get only the undeleted items 

    $scope.total (total); 
}; 
+1

ありがとう、ありがとう、ありがとう! –

+0

こんにちは、あなたのスクリプトは完璧な仕事ですが、anortherの問題があります:私はremoveItem()をクリックした後、htmlコードの私の結果はproblem.After Ngを繰り返す私の結果は:1いくつかのテキスト、2いくつかのテキスト、3いくつかのtext.After関数をクリックすると、削除された結果が表示されます。 –

+0

@СтилиянГеоргиевHey、その場合、 'ngIf'を削除し、' ngRepeat'に削除されていない項目だけを表示するフィルタを追加することができます: 'ng-repeat =" ....... | filter :{'deleted': '!true'} '**重要!!! - **' $ index'を 'dataInvoce.Invoicetoitemの中の項目への参照として信頼してはいけません。これは実際にフィルタリングされたリストのインデックスなので、予期せぬ動作を避けるには、 'ng-keyup =" getItemInvoice($ index) "' 'を' ng-keyup = "getItemInvoice(dataItem)" 'に変換する必要があります。 –

0

あなたが望むのは、angularjsのソフト削除です。あなたはngのリピートにフィルターを使用することによって、これを達成することができます

<tr class="clone" ng-repeat="dataItem in dataInvoce.Invoicetoitem.items track by $index | filter: { 'isDeleted': 'false'}">...</tr> 

trueにデータ項目(dataInvoce.Invoicetoitem.itemsの任意の行)のisDeletedプロパティを設定することにより、フィルタがすべて削除されますプロパティisDeleted:trueを含む行のうち、

これを実行すると、表示から削除された行を維持したまま、正しい表示動作が行われます。

<tr class="clone" ng-repeat="dataItem in dataInvoce.Invoicetoitem.items track by $index" ng-if="!dataItem.deleted"> 

そして、あなたはコントローラにremoveItem関数にオブジェクトを渡すことができます:あなたが行にngIfディレクティブを追加する必要がng-repeat filter

+0

'$ index'と' filter'を使うことに注意してください。 - これは、元のインデックスではなく、フィルタリングされたコレクションのインデックスを取得します –

0

、パフォーマンスを向上させるために使用ng-if

$("selector").toggle(); 

http://api.jquery.com/toggle/

+0

この質問は 'jquery'でタグ付けされていません - これはAngularjsであり、物事はjqueryとは異なります –

0

を表示または非表示の行に使用トグル()。余分なウォッチャーの問題ではありません。コントローラ$scope.removeItemメソッド内

<tr class="clone" ng-repeat="dataItem in dataInvoce.Invoicetoitem.items track by $index" ng-if="dataItem.isDeleted"> 

dataItem.isDeleted = true;はまた、あなたがこのためにNG-ショーディレクティブを使用することができますdataItemではなく$index

関連する問題