2017-03-07 2 views
0

Ich versuche, ein div dynamisch hinzugefügt, indem Sie auf die Schaltfläche Entfernen entfernen. Ich habe diese Geige https://jsfiddle.net/y4punqp3/2/ für die Bequemlichkeit erstellt.Entfernen Sie dynamische Div mit Angular

Die Funktion remove

$scope.removeUnavailability = function() { 
    --numUnavail; 
    document.getElementById("tempUnavail").remove(); 
} 

Die entsprechende Zeile gelöscht werden soll, wenn auf die Schaltfläche Entfernen klicken. Was fehlt mir?

+1

Sie Winkel falsch verwenden. Sie möchten das DOM nicht manuell manipulieren, Sie möchten ein Modell in Ihrem Controller haben, um den aktuellen Status Ihrer Anwendung darzustellen, und Ihre Vorlage sollte automatisch an diese Daten angepasst werden ... Gib mir ein paar Momente und ich werde mich ändern Deine Geige muss eckig sein. – Fissio

+0

Der Code in Ihrer Frage ist kein [mcve]. Sie müssen in der Frage selbst einen MCVE ** angeben **. Der mit JS Fiddle ** verknüpfte Code stimmt nicht mit dem Code in der Frage ** überein. – Quentin

+0

@Quentin 'Der mit JS Fiddle verknüpfte Code stimmt nicht mit dem Code in der Frage überein." Die Geige ist nahe genug an der Frage im Code, dass sie kein Problem sein sollte. " – Fissio

Antwort

1

die aktualisierte Geige für eine saubere Lösung prüfen:

In Angular Sie die Daten in Ihrem Controller das Modell und die Vorlage Sachen darstellen zu wollen auf diesem Modell zeichnen basiert. Sie möchten HTML nicht manuell hinzufügen/entfernen oder das DOM in irgendeiner Weise außerhalb der Direktiven bearbeiten, sonst schießen Sie sich nur in den Fuß und Sie verwenden nicht wirklich sinnvoll eckig.

JS:

var app = angular.module("satUnav-app", []); 
app.controller("satUnav-ctrl", function($scope) { 

    $scope.unavailabilities = []; 

    $scope.addUnavailability = function() { 
    $scope.unavailabilities.push({}); 
    } 

    $scope.removeUnavailability = function (idx) { 
    $scope.unavailabilities.splice(idx, 1); 
    } 
}); 

HTML:

<div ng-repeat="unavail in unavailabilities"> 
    <select ng-model="unavail.selection"> 
     <option>PRN 01 (ID:401)</option> 
     <option>PRN 02 (ID:402)</option> 
     <option>PRN 03 (ID:403)</option> 
     <option>PRN 04 (ID:404)</option> 
    </select> 
    <label for="tempUnavail">Start</label> 
    <input type="datetime-local" ng-model="unavail.start"> 
    <label for="tempUnavail">Stop</label> 
    <input type="datetime-local" ng-model="unavail.stop"> 
    <button type="button" data-ng-click="removeUnavailability($index)">Remove</button> 
</div> 

Jetzt haben wir schön und sauber Angular Code, wo es einfach ist, divs durch Bearbeiten der Array Umfang Variable nur hinzufügen/entfernen, auf deren Grundlage die Ansicht ist gezeichnet - nichts von dieser albernen DOM-Manipulation.

EDIT: Und wie immer in diesen jQuery-Angular-Fragen, hier die Antwort finden Sie unter: https://stackoverflow.com/a/15012542/3368834

+0

Danke Fissio. Es funktioniert gut. Trotzdem fällt es mir schwer, das ng-Modell-Konzept zu verstehen. Ich weiß, dass es eine Art "Brücke" zwischen HTML-Eingaben und Winkelvariablen bietet, aber mir ist immer noch nicht klar, wie es funktioniert. Soweit ich sehen kann, erstellen Sie mit "unavail.selection, unavail.start und unavail.stop" 3 Variablen, die darstellen, was der Benutzer auswählt. Diese Variablen könnten im Winkelskript verarbeitet werden (z. B. zur Validierung). Ist es richtig? – Dad85

+0

@Fisso: Wie kann ich Ihre Geige so ändern, dass die erste Option im Auswahlmenü, die beim Klicken angezeigt wird, keine leere Zelle ist, sondern einen Titel wie "Wählen Sie einen"? – Dad85

+0

@ Dad85 bei deinem ersten Kommentar, ja, das ist es ziemlich - du kannst die Dokumente für NG-Modelle nachsehen, wie es mit verschiedenen Eingängen funktioniert. Was deine zweite Frage angeht, hier ist eine aktualisierte Geige mit einer voreingestellten Standardoption, im Grunde du Setzen Sie einfach 'value =" "' auf die gewünschte Option wie folgt: https: // jsfiddle.net/y4punqp3/6/ – Fissio