2017-03-27 4 views
0

Ich benutze eckig (erste Version) und ich habe Probleme beim Versuch, eine Aufgabe zu erfüllen. Ich habe eine Liste von Elementen, die ich von der Server-DB abrufe. Ich listet diese Elemente in einer HTML-Tabelle auf. Es gibt ein boolesches Feld, das ich dynamisch aktualisieren möchte, wenn der Benutzer ein Kontrollkästchen aktiviert oder deaktiviert. Das Problem ist während der Bestätigung. Wenn ich die Bestätigung abbringe, überprüfe, ob der Zustand noch immer erhalten bleibt (check/uncheck) und nicht in den vorherigen Zustand zurückkehrt. Ich habe versucht mit "preventDefault", es hat nicht funktioniert. Ich habe versucht, das Elementarray zu "aktualisieren", damit die Ansicht die Daten aktualisieren kann, es hat nicht funktioniert. Hier ist eine Geige mit einer Darstellung von dem, was ich habe: FiddleAngularJS mg-Wiederholung von Elementen mit Kontrollkästchen verhindert Standard bei abgebrochener Bestätigung

<div ng-app ng-controller="demoController"> 
    <h3> 
    <span class="status">{{ status }}</span> 
    </h3> 
    <h2> 
    Movies i've seen 
    </h2> 
    <table> 
    <tr> 
     <th>Name</th> 
     <th>Have I seen it?</th> 
    </tr> 
    <tbody> 
     <tr ng-repeat="movie in movies"> 
     <td> {{movie.name}}</td> 
     <td style="text-align: center"> 
      <input value=" {{ movie.name }}" type="checkbox" ng-checked="movie.seen" ng-click="confirmSeen(this, $index)" /> </td> 
     </tr> 
    </tbody> 
    </table> 
</div> 



function demoController($scope) { 
    $scope.status = "AngularJS is up"; 
    $scope.confirmSeen = function(e, idx) { 
    var movie = $scope.movies[idx]; 
    if (movie !== undefined) { 
     var msg = ""; 
     if(movie.seen) { 
     msg = "Are you sure you want to mark " + movie.name + " as unseen?"; 
     } else { 
     msg = "Are you sure you want to mark " + movie.name + " as seen?"; 
     } 

     if (confirm(msg)) { 
     movie.seen = !movie.seen; 
     $scope.movies.splice(idx, 1, movie); 
     } else { 
     $scope.movies.splice(idx, 1, movie); 
     e.stopImmediatePropagation(); 
     e.preventDefault(); 
     } 
    } else { 
     e.stopImmediatePropagation(); 
     e.preventDefault(); 
    } 
    } 
    $scope.movies = [{ 
    name: "Conan", 
    seen: false 
    }, { 
    name: "Scarface", 
    seen: true 
    }, { 
    name: "GhostBuster", 
    seen: false 
    }, { 
    name: "The Shawshank Redemption", 
    seen: true 
    }, { 
    name: "Goodfellas", 
    seen: true 
    }, { 
    name: "Life", 
    seen: false 
    }]; 
} 

Antwort

1

Sie haben die $event in der ng-click Funktion zu übergeben.

einfach ersetzen:

ng-click="confirmSeen(this, $index)" 

An:

ng-click="confirmSeen($event, $index)" 
+0

Geck, Sie sind genial. Vielen Dank! Lustig, wie einfache Dinge mich nur verwirren. – Ph0b0x

Verwandte Themen