2017-01-24 3 views
0

Ich benutze AngularJS und ich habe eine Tabelle auf meiner Seite, ich machte eine Schaltfläche zum Hinzufügen von Zeilen mit Eingabefeldern. Meine Lösung funktioniert gut zum Hinzufügen von Zeilen und Wert von Eingabefeldern in Form, aber funktioniert nicht gut, wo ich bestimmte Zeile löschen muss. Ich verwende eine Funktion für das Formular und eine weitere für das Hinzufügen und Löschen von Zeilen.AngularJS Zeile in Tabelle hinzufügen

Es ist so:

<div ng-init="tmplCtr.newPeople()"> 
<div class="col-lg-12"> 
    <input name="postsubmit" class="btn btn-default btn-sm" type="submit" value="Save table" ng-click="tmplCtr.newTable(tmplCtr.table)" /> 
    <button class="btn btn-default btn-sm" ng-click="tmplCtr.editRow()">Add row</button> 
</div> 

<form name="peopleForm" novalidate> 

    <div class="table-responsive"> 
     <table class="table"> 
      <thead> 
       <tr> 
        <th class="place-name">Name</th> 
        <th class="place-value">Lastname</th> 
        <th class="place-options">Options</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr ng-repeat="people in tmplCtr.peoples"> 
        <td class="place-name"><input type="text" name="" class="form-control" autocomplete="off" ng-model="tmplCtr.peoples.values[$index].name"></td> 
        <td class="place-last"><input type="text" name="" class="form-control" autocomplete="off" ng-model="tmplCtr.peoples.values[$index].lastname"></td> 
        <td class="place-options"><button class="btn btn-danger btn-md btn-delete" ng-click="tmplCtr.editRow($index)">Delete</button></td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 

</form> 

Wenn ich Taste Reihe I Reihe bekommen hinzufügen drücken, aber wenn ich Zeile drücken lösche ich Reihe von Bildschirm, aber letzte Zeile in dem Feld löschen, nicht durch den Index. Außerdem wird der Wert dieser Zeile nicht aus dem Formularbereich gelöscht. Funktion ist:

function editRow(item) { 
     if(item == undefined) { 
      vm.peoples.push({}); 
     } else { 
      vm.peoples.splice(item,1); 
     } 
    } 

Kann mir jemand helfen?

+0

Sie sollten nicht ng-Modell = "tmplCtr.table.values ​​[$ index] .name" stattdessen verwendet ng-Modell verwenden = "place.name" und ähnlich wie andere Felder Klicken Sie auf die Schaltfläche Löschen, können Sie das Objekt placement senden. ng-click = „tmplCtr.editRow (Ort)“ Innen EditRow Sie können in dem Feld für den Ort suchen und es –

+0

entfernen, aber das Hinzufügen Es ist in Ordnung, ich brauche Objekt aus tmplCtr.peoples.values ​​Array zu löschen. Ich sende einen guten Index in der Bearbeitungszeile, aber vm.peoples.splice (item, 1); macht irgendwie keinen guten Job – Sasa

+0

Könnten Sie einen Plünderer machen? – Korte

Antwort

0

Ich denke, es ist besser zu zwei Funktionen zu machen, die erste ist Artikel für das Hinzufügen und das zweite ist wie unten zum Löschen:

function addEmptyItem(){ 
    vm.peoples.push({}); 
} 

function deleteItem(index){ 
    vm.peoples.splice(index, 1); 
} 

Dann Ihrer Ansicht nach können Sie tmplCtr.editRow($index) ändern ->tmplCtr.deleteItem($index)

Des Weiteren wird dringend empfohlen, diese Syntax person.name usw. in Ihrer Wiederholungsanweisung zu verwenden.

EDIT:

Dies übrigens nicht getestet ...

+0

mache, funktioniert es nicht, vm.peoples.splice (index); lösche alles, wenn ich schreibe vm.peoples.splice (index, 1); Löschen Sie dann die letzte Zeile im Array – Sasa

+0

@Sasa versuchen Sie die aktualisierte Antwort. Wenn es nicht funktioniert, müssen Sie das $ scope-Objekt aktualisieren. Bitte lassen Sie mich wissen, wenn ein Problem und ich werde Ihnen erklären –

+0

Ich werde, ich werde versuchen, Frage zu aktualisieren und zu machen, um leichter zu sein – Sasa

Verwandte Themen