Ich habe ein paar Kontrollkästchen:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
Ich möchte an eine Liste in meinem Controller binden, sodass der Controller bei jedem Ändern eines Kontrollkästchens eine Liste aller aktivierten Werte führt, z. ['apple', 'pear']
.
ng-model scheint nur in der Lage zu sein, den Wert eines einzelnen Kontrollkästchens an eine Variable im Controller zu binden.
Gibt es eine andere Möglichkeit, die vier Kontrollkästchen an eine Liste im Controller zu binden?
javascript
angularjs
Nickponline
quelle
quelle
<input type='checkbox' ng-model="checkboxes.apple">
Usw. Modell wäre: {"Apfel": wahr, "orange": falsch, "Birne": wahr, "naartjie": wahr}naartjie
!? Das verrät dir nur Boet! : DAntworten:
Es gibt zwei Möglichkeiten, um dieses Problem anzugehen. Verwenden Sie entweder ein einfaches Array oder ein Array von Objekten. Jede Lösung hat Vor- und Nachteile. Nachfolgend finden Sie für jeden Fall eine.
Mit einem einfachen Array als Eingabedaten
Der HTML-Code könnte folgendermaßen aussehen:
Und der entsprechende Controller-Code wäre:
Vorteile : Einfache Datenstruktur und das Umschalten nach Namen sind einfach zu handhaben
Nachteile : Hinzufügen / Entfernen ist umständlich, da zwei Listen (Eingabe und Auswahl) verwaltet werden müssen
Mit einem Objektarray als Eingabedaten
Der HTML-Code könnte folgendermaßen aussehen:
Und der entsprechende Controller-Code wäre:
Vorteile : Hinzufügen / Entfernen ist sehr einfach
Nachteile : Eine etwas komplexere Datenstruktur und das Umschalten nach Namen ist umständlich oder erfordert eine Hilfsmethode
Demo : http://jsbin.com/ImAqUC/1/
quelle
value="{{fruit.name}}"
undng-checked="fruit.checked"
sind überflüssig, da ng-model verwendet wird.Eine einfache Lösung:
http://plnkr.co/edit/U4VD61?p=preview
quelle
(color,enabled) in colors
?colors
es sich um ein Objekt handelt, erhalten Sie beim Iterieren Paare von(key,value)
.colors
sollte benannt werdenisSelected
, ist es viel einfacher zu lesenisSelected[color]
alscolors[color]
.
quelle
Hier ist eine kurze, wiederverwendbare Direktive, die genau das zu tun scheint, wonach Sie suchen. Ich habe es einfach genannt
checkList
. Es aktualisiert das Array, wenn sich die Kontrollkästchen ändern, und aktualisiert die Kontrollkästchen, wenn sich das Array ändert.Hier ist ein Controller und eine Ansicht, die zeigt, wie Sie ihn möglicherweise verwenden.
(Die Schaltflächen zeigen, dass durch Ändern des Arrays auch die Kontrollkästchen aktualisiert werden.)
Schließlich ist hier ein Beispiel für die Richtlinie in Aktion auf Plunker: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview
quelle
value: '@'
durchvalue: '=ngValue'
Basierend auf den Antworten in diesem Thread habe ich eine Checklistenmodell- Direktive erstellt, die alle Fälle abdeckt:
Für den Thema-Starter-Fall wäre es:
quelle
selectedFruits
.Die Verwendung einer Zeichenfolge von
$index
kann helfen, eine Hashmap ausgewählter Werte zu verwenden:Auf diese Weise wird das ng-model-Objekt mit dem Schlüssel aktualisiert, der den Index darstellt.
Nach einer Weile
$scope.someObject
sollte ungefähr so aussehen:Diese Methode funktioniert nicht in allen Situationen, ist jedoch einfach zu implementieren.
quelle
Da Sie eine Antwort akzeptiert haben, in der keine Liste verwendet wurde, gehe ich davon aus, dass die Antwort auf meine Kommentarfrage "Nein, es muss keine Liste sein" lautet. Ich hatte auch den Eindruck, dass Sie möglicherweise die HTML-Serverseite gerendert haben, da "geprüft" in Ihrem Beispiel-HTML vorhanden ist (dies wäre nicht erforderlich, wenn ng-model zum Modellieren Ihrer Kontrollkästchen verwendet würde).
Folgendes habe ich mir gedacht, als ich die Frage gestellt habe, vorausgesetzt, Sie haben die HTML-Serverseite generiert:
Mit ng-init können serverseitig generiertes HTML zunächst bestimmte Kontrollkästchen setzen.
Geige .
quelle
Ich denke, die einfachste Problemumgehung wäre die Verwendung von 'select' mit 'multiple':
Andernfalls müssen Sie die Liste verarbeiten, um die Liste zu erstellen (indem
$watch()
Sie das Modellarray mit Kontrollkästchen binden).quelle
Ich habe Yoshis akzeptierte Antwort angepasst, um mit komplexen Objekten (anstelle von Zeichenfolgen) umzugehen.
HTML
JavaScript
Arbeitsbeispiel: http://jsfiddle.net/tCU8v/
quelle
<input type="checkbox">
ohne Verpackung oder Matching haben<label>
! Jetzt müssen Ihre Benutzer auf das eigentliche Kontrollkästchen anstatt auf den Text neben dem Kontrollkästchen klicken, was viel schwieriger und benutzerfreundlicher ist.Eine andere einfache Anweisung könnte lauten:
Der Controller:
Und der HTML:
Ich füge auch einen Plunker hinzu: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview
quelle
Die folgende Lösung scheint eine gute Option zu sein:
Und im Controller-Modell wird der Wert
fruits
so seinquelle
Sie müssen nicht den ganzen Code schreiben. AngularJS hält das Modell und die Kontrollkästchen einfach mithilfe von ngTrueValue und ngFalseValue synchron
Codepen hier: http://codepen.io/paulbhartzog/pen/kBhzn
Code-Auszug:
quelle
Schauen Sie sich diese Anweisung an, mit der Listen von Kontrollkästchen effektiv verwaltet werden. Ich hoffe es funktioniert bei dir. CheckList-Modell
quelle
Es gibt eine Möglichkeit, direkt am Array zu arbeiten und gleichzeitig das ng-Modell zu verwenden
ng-model-options="{ getterSetter: true }"
.Der Trick besteht darin, eine Getter / Setter-Funktion in Ihrem ng-Modell zu verwenden. Auf diese Weise können Sie ein Array als Ihr reales Modell verwenden und die Booleschen Werte im Modell der Eingabe "fälschen":
CAVEAT Sie sollten diese Methode nicht verwenden, wenn Ihre Arrays so groß sind wie
myGetterSetter
dies häufig genannt wird.Weitere Informationen hierzu finden Sie unter https://docs.angularjs.org/api/ng/directive/ngModelOptions .
quelle
Ich mag Yoshis Antwort. Ich habe es erweitert, damit Sie dieselbe Funktion für mehrere Listen verwenden können.
http://plnkr.co/edit/KcbtzEyNMA8s1X7Hja8p?p=preview
quelle
Wenn Sie mehrere Kontrollkästchen im selben Formular haben
Der Controller-Code
Code anzeigen
quelle
Inspiriert von Yoshis Beitrag oben. Hier ist die plnkr .
quelle
Basierend auf meinem anderen Beitrag hier ich eine wiederverwendbare Richtlinie erstellt.
Überprüfen Sie das GitHub-Repository
quelle
Im HTML-Code (vorausgesetzt, die Kontrollkästchen befinden sich in der ersten Spalte jeder Zeile in einer Tabelle).
In der
controllers.js
Datei:quelle
Hier ist noch eine andere Lösung. Der Vorteil meiner Lösung:
Hier ist die Richtlinie:
Am Ende benutze es dann einfach so:
Und das ist alles was es gibt. Die einzige Ergänzung ist das
checkbox-array-set
Attribut.quelle
Sie können AngularJS und jQuery kombinieren. Beispielsweise müssen Sie
$scope.selected = [];
im Controller ein Array definieren .Sie können ein Array erhalten, das die ausgewählten Elemente besitzt. Mit der Methode
alert(JSON.stringify($scope.selected))
können Sie die ausgewählten Elemente überprüfen.quelle
quelle
Schauen Sie sich das an: Checklistenmodell .
Es funktioniert mit JavaScript-Arrays und -Objekten und kann statische HTML-Kontrollkästchen ohne ng-repeat verwenden
Und die JavaScript-Seite:
quelle
Eine einfache HTML-Methode:
quelle
Anhand dieses Beispiels des @Umur Kontacı denke ich daran, ausgewählte Daten in einem anderen Objekt / Array wie einer Bearbeitungsseite abzufangen.
Fangoptionen in der Datenbank
Schalten Sie eine Option um
Als Beispiel sind alle Farben unten aufgeführt:
Und 2 Arten von Datenobjekten
array
mit einem Objekt undobject
zwei / mehr Objektdaten:Zwei ausgewählte Elemente wurden in der Datenbank gefangen:
Ein ausgewähltes Element wurde in der Datenbank gefangen:
Und hier mein Javascript-Code:
Mein HTML-Code:
[Bearbeiten] Refactored Code unten:
Und rufen Sie die neue Methode wie folgt auf:
Das ist es!
quelle
Ich habe ein Array in den Controller eingefügt.
Auf das Markup habe ich so etwas wie folgendes gesetzt
Die Ausgabe war die folgende, in der Steuerung musste ich nur überprüfen, ob es wahr oder falsch ist; wahr für geprüft, abwesend / falsch für ungeprüft.
Hoffe das hilft.
quelle
Ich denke, der folgende Weg ist klarer und nützlicher für verschachtelte ng-Wiederholungen. Schau es dir auf Plunker an .
Zitat aus diesem Thread :
quelle
Hier ist der jsFillde-Link für dasselbe, http://jsfiddle.net/techno2mahi/Lfw96ja6/ .
Hierbei wird die Richtlinie verwendet, die unter http://vitalets.github.io/checklist-model/ zum Download zur Verfügung steht .
Dies ist eine gute Direktive, da Ihre Anwendung diese Funktionalität häufig benötigt.
Der Code ist unten:
HTML:
JavaScript
quelle
<div>
als schließende</div>
. Hast du etwas ausgelassen?Versuchen Sie mein Baby:
** **.
** **.
Für jedes ng-Modell mit Kontrollkästchen wird dann eine Zeichenfolge aller von Ihnen ausgewählten Eingaben zurückgegeben:
quelle