Ich möchte das Optionsfeld in einem Formular mit Angular 2 verwenden
Options : <br/>
1 : <input name="options" ng-control="options" type="radio" value="1" [(ng-model)]="model.options" ><br/>
2 : <input name="options" ng-control="options" type="radio" value="2" [(ng-model)]="model.options" ><br/>
Der Anfangswert von model.options ist 1
Wenn die Seite geladen wird, wird das erste Optionsfeld nicht aktiviert und die Änderungen werden nicht an das Modell gebunden
Irgendeine Idee ?
forms
radio-button
angular
Mourad Zouabi
quelle
quelle
Antworten:
benutze [value] = "1" anstelle von value = "1"
Bearbeiten:
Wie von thllbrg vorgeschlagen "Für Winkel 2.1+
[(ngModel)]
anstelle von[(ng-model)]
"quelle
[(ngModel)]
anstelle von verwenden[(ng-model)]
. Lesen Sie noch einmal .value="1" [(ngModel)]="model.options"
. Das Einschließen dervalue
eckigen Klammern funktionierte nichtHinweis - Optionsfeld Bindung wird nun eine unterstützte Funktion in RC4 ab - sehen Sie diese Antwort
Beispiel für ein Optionsfeld mit einem benutzerdefinierten RadioControlValueAccessor ähnlich dem CheckboxControlValueAccessor ( aktualisiert mit Angular 2 rc-1 )
App.ts
template.html
radio_value_accessor.ts
Quelle: https://github.com/angular2-school/angular2-radio-button
Plunker Live-Demo: http://plnkr.co/edit/aggee6An1iHfwsqGoE3q?p=preview
quelle
this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', value == this._elementRef.nativeElement.value);
Meine manuelle Problemumgehung, bei der manuell aktualisiert wird,
model.options
wenn ein neues Optionsfeld ausgewählt wird:Dies Plunkerzeigt das oben Genannte sowie die Verwendung einer Schaltfläche zum Ändern des ausgewählten Optionsfelds, dh um zu beweisen, dass die Datenbindung in beide Richtungen erfolgt:
quelle
get debug()
Funktion, wofürget
steht? Zweitens: Gibt es eine Alternative wie diese Antwort für die Kontrollkästchen? Bitte geben Sie auch einen Code für Kontrollkästchen ein. danke +1 für die tolle Antwort.get
ist eine TypeScript-Accessor-Funktion . Stellen Sie eine Frage zu den Kontrollkästchen.Anotherdate('2015-05-18T02:30:56')
nicht. Setter werden aufgerufen, wenn Sie versuchen, einer Eigenschaft einen Wert zuzuweisen. In meinem Plunker habe ich einesetDate()
Funktion erstellt, mit der \ hat einen neuen Datumswert akzeptiert, der dann zugewiesen wirdAnotherdate
. Diese Zuweisung ruft automatisch den Setter auf.{{}}
Bindungen werden bei jedem Änderungserkennungszyklus neu bewertet. Ich habengDoCheck()
in der AppComponent im Plunker implementiert, um Änderungserkennungszyklen zu zählen. Daraus sehen wir, dass die Änderungserkennung dreimal aufgerufen wird. Im Dev-Modus werden Bindungen zweimal überprüft , daher die 6-mal.Hier ist die beste Möglichkeit, Optionsfelder in Angular2 zu verwenden. Es ist nicht erforderlich, das (Klick-) Ereignis oder einen RadioControlValueAccessor zu verwenden, um den Wert der gebundenen Eigenschaft zu ändern. Das Festlegen der Eigenschaft [checked] reicht aus.
Ich habe ein Beispiel für die Verwendung von Optionsfeldern veröffentlicht: Winkel 2: Wie erstelle ich Optionsfelder aus Enum und füge eine bidirektionale Bindung hinzu? Es funktioniert mit mindestens Angular 2 RC5.
quelle
Dieses Problem wurde in Version Angular 2.0.0-rc.4 bzw. in Formularen behoben.
Fügen Sie
"@angular/forms": "0.2.0"
in package.json.Dann erweitern Sie Ihren Bootstrap in main. Relevanter Teil:
Ich habe dies in .html und funktioniert perfekt: Wert: {{buildTool}}
quelle
disableDeprecatedForms
undprovideForms
sieht magisch aus und macht keinen Sinn. Was machen diese Dinge? Dies ist redundanter unlesbarer Code, der unvorhersehbare Dinge von unbekanntem Ausmaß macht.Ich habe nach der richtigen Methode gesucht, um mit diesen Optionsfeldern umzugehen. Dies ist ein Beispiel für eine Lösung, die ich hier gefunden habe:
Beachten Sie den onSelectionChange , der das aktuelle Element an die Methode übergibt.
quelle
Radioeingang scheint noch nicht unterstützt zu werden. Es sollte ein Funkeingangswert Accessor (ähnlich Checkbox ist sein ein , wo er setzt ‚geprüft‘ attr hier ) , aber ich habe keine gefunden. Also habe ich eine implementiert; Sie können es hier überprüfen .
quelle
[value] = "item" mit * ngFor funktioniert auch mit reaktiven Formen in Winkel 2 und 4
quelle
Im Folgenden wurde mein Problem behoben. Fügen Sie dem
form
Tag möglicherweise einen Radioeingang hinzu und verwenden Sie das[value]
Tag, um den Wert anzuzeigen.quelle
Hier ist eine Lösung, die für mich funktioniert. Es handelt sich um eine Optionsfeldbindung - jedoch nicht um eine Bindung an Geschäftsdaten, sondern um eine Bindung an den Status des Optionsfelds. Es ist wahrscheinlich NICHT die beste Lösung für neue Projekte, aber für mein Projekt geeignet. In meinem Projekt ist eine Menge vorhandener Code in einer anderen Technologie geschrieben, die ich auf Angular portiere. Der alte Code folgt einem Muster, bei dem der Code sehr daran interessiert ist, jedes Optionsfeld zu untersuchen, um festzustellen, ob es das ausgewählte ist. Die Lösung ist eine Variation der Click-Handler-Lösungen, von denen einige bereits in Stack Overflow erwähnt wurden. Der Mehrwert dieser Lösung kann sein:
Diese Lösung beinhaltet
Beispiel:
...
...
Wenn der Benutzer auf ein Optionsfeld klickt, wird die selectButton-Methode der Hilfsklasse aufgerufen. Es wird das Modell für das Optionsfeld übergeben, auf das geklickt wurde. Die Hilfsklasse setzt das boolesche "ausgewählte" Feld des übergebenen Modells auf "true" und das "ausgewählte" Feld aller anderen Optionsfeldmodelle auf "false".
Während der Initialisierung muss die Komponente eine Instanz der Hilfsklasse mit einer Liste aller Optionsfeldmodelle in der Gruppe erstellen. Im Beispiel wäre "radioButtonGroupList" eine Instanz der Hilfsklasse, deren Code lautet:
quelle
Angular 8 Radio Listing Beispiel:
Quelle Link -
JSON-Antwort
HTML-Vorlage
quelle
Einfachste Lösung und Problemumgehung:
quelle
Ich habe eine Version erstellt, indem ich nur ein Klickereignis auf die geladenen Elemente verwendet und den Wert der Auswahl an die Funktion "getSelection" übergeben und das Modell aktualisiert habe.
In Ihrer Vorlage:
Deine Klasse:
Siehe Beispiel: https://plnkr.co/edit/2Muje8yvWZVL9OXqG0pW?p=info
quelle
So sehr diese Antwort je nach Anwendungsfall möglicherweise nicht die beste ist, funktioniert sie. Anstatt das Optionsfeld für eine Auswahl für Männer und Frauen zu verwenden,
<select> </select>
funktioniert die Funktion perfekt, sowohl zum Speichern als auch zum Bearbeiten.Das Obige sollte für die Bearbeitung mit FormGroup mit gut funktionieren
patchValue
. Zum Erstellen können Sie[(ngModel)]
anstelle von verwendenformControlName
. Funktioniert noch.Bei der Installation des Optionsfelds habe ich mich stattdessen für die Auswahl entschieden. Optisch und UX-weise scheint es nicht das Beste zu sein, aber vom Standpunkt eines Entwicklers aus ist es eine Menge einfacher.
quelle
Beim Ändern des Optionsfelds erhalten Sie den Wert der jeweiligen Schaltflächen mit diesen Zeilen
https://stackblitz.com/edit/angular-jpo2dm?embed=1&file=src/app/app.component.html
quelle
Hier ist ein Code, den ich verwende und der mit Angular 7 funktioniert
(Hinweis: In der Vergangenheit habe ich manchmal Informationen aus der Antwort von Anthony Brenelière verwendet, die ich sehr schätze. Aber zumindest für Angular 7 ist dieser Teil:
Ich fand es unnötig.)
Meine Lösung hier hat drei Vorteile:
Beispiel HTML:
Beispiel TypeScript:
Es werden zwei Klassen verwendet:
Optionsfeld Gruppenklasse:
Optionsfeldklasse
quelle
Dies ist möglicherweise nicht die richtige Lösung, aber dies ist auch eine Option, die hoffentlich jemandem helfen wird.
Bis jetzt hatte ich den Wert von radioButtons mit der (Klick-) Methode wie folgt erhalten:
und in der .ts-Datei habe ich den Wert der vordefinierten Variablen auf den Getter-Wert der
onChange
Funktion gesetzt.Aber nach der Suche fand ich gute Methode i noch have't versucht , aber es scheint dies eine gut mit
[(ng-model)]
Link hier ist GitHub hier . Dies wird sowohlRadioControlValueAccessor
für das Radio als auch für das Kontrollkästchen verwendet. hier ist die Arbeit # plnkr # für diese Methode hier .quelle