Ich habe bereits versucht, dem Beispiel anderer Antworten von hier aus zu folgen, und es ist mir nicht gelungen!
Ich habe ein reaktives Formular (dh ein dynamisches Formular) erstellt und möchte einige Felder jederzeit deaktivieren. Mein Formularcode:
this.form = this._fb.group({
name: ['', Validators.required],
options: this._fb.array([])
});
const control = <FormArray>this.form.controls['options'];
control.push(this._fb.group({
value: ['']
}));
mein html:
<div class='row' formArrayName="options">
<div *ngFor="let opt of form.controls.options.controls; let i=index">
<div [formGroupName]="i">
<select formArrayName="value">
<option></option>
<option>{{ opt.controls.value }}</option>
</select>
</div>
</div>
</div>
Ich habe den Code reduziert, um dies zu erleichtern. Ich möchte das Feld Typauswahl deaktivieren. Ich habe Folgendes versucht:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
funktioniert nicht! Hat jemand einen Vorschlag?
first
? `:)value
ist kein formArray, sondern ein formControlName. Wenn Sievalue
ein formArray sein möchten, müssen Sie es ändern. Derzeit ist es ein formControlName. Wenn Sie also möchten, dass das gesamte Auswahlfeld deaktiviert wird, wechseln Sie einfach<select formArrayName="value">
zu<select formControlName="value">
Antworten:
oder
quelle
if
Anweisungen. Nach dem Absenden des Formulars wird das gesamte Formular erneut deaktiviert.Passt auf
Wenn Sie ein Formular mit einer Variablen für die Bedingung erstellen und später versuchen, es zu ändern, funktioniert es nicht, dh das Formular ändert sich nicht .
Beispielsweise
und wenn Sie die Variable ändern
Das Formular wird sich nicht ändern. Du solltest benutzen
Übrigens.
Sie sollten die patchValue-Methode verwenden, um den Wert zu ändern:
quelle
Es ist eine schlechte Praxis, die Deaktivierung in einem DOM mit reaktiven Formen zu verwenden. Sie können diese Option in Ihrem festlegen
FormControl
, wenn Sie das von initiierenEigentum
value
ist nicht notwendigOder Sie können Ihre Formularsteuerung mit erhalten
get('control_name')
und festlegendisable
quelle
It looks like you’re using the disabled attribute with a reactive form directive. If you set disabled to true when you set up this control in your component class, the disabled attribute will actually be set in the DOM for you. We recommend using this approach to avoid ‘changed after checked’ errors
. Also die empfohlene Möglichkeit, den Deaktivierungs- / Aktivierungsstatus direkt über Steuerelemente zu ändern. Sie können auch dieses großartige Thema überprüfen netbasal.com/…Ich habe es gelöst, indem ich mein Eingabeobjekt mit seiner Bezeichnung in eine Feldmenge eingeschlossen habe: In der Feldmenge sollte die Eigenschaft disabled an den Booleschen Wert gebunden sein
quelle
Das
disabling
FormControlprevents
soll in einer Form vorhanden seinsaving
. Sie können einfach diereadonly
Eigenschaft festlegen .Und Sie können es so erreichen:
HTML:
TS:
Fand das hier
quelle
form.getRawValue()
die Werte für deaktivierte SteuerelementeWenn die Verwendung von
disabled
Formulareingabeelementen (wie in der richtigen Antwort zum Deaktivieren der Eingabe vorgeschlagen ) ebenfalls deaktiviert ist, beachten Sie dies!(Und wenn Sie die Schaltfläche "Senden" verwenden
[disabled]="!form.valid"
, wird Ihr Feld von der Validierung ausgeschlossen.)quelle
Ein allgemeinerer Ansatz wäre.
quelle
Wenn Sie deaktivieren möchten
first
(formcontrol), können Sie die folgende Anweisung verwenden.this.form.first.disable();
quelle
Das hat bei mir funktioniert:
this.form.get('first').disable({onlySelf: true});
quelle
Oder formcontrol 'first'
Sie können Deaktivieren oder Aktivieren beim ersten Einstellen festlegen.
quelle
quelle
Die beste Lösung ist hier:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Lösungsüberblick (bei defekter Verbindung):
(1) Erstellen Sie eine Richtlinie
(2) Verwenden Sie es so
(3) Da deaktivierte Eingaben beim Senden nicht in form.value angezeigt werden, müssen Sie möglicherweise stattdessen Folgendes verwenden (falls erforderlich):
quelle
this.form.get('FIELD_NAME').patchValue(DYNAMIC_VALUE)
zeige ich das formControl. Wenn es an die Direktive übergeben wird, wirdIch hatte das gleiche Problem, aber das Aufrufen von this.form.controls ['name']. Disable () hat es nicht behoben, da ich meine Ansicht neu geladen habe (mithilfe von router.navigate ()).
In meinem Fall musste ich mein Formular vor dem erneuten Laden zurücksetzen:
this.form = undefined; this.router.navigate ([Pfad]);
quelle
quelle
Sie können eine Funktion zum Aktivieren / Deaktivieren des gesamten Formularsteuerelements deklarieren:
und benutze es so
quelle
Um ein Feld zu machen deaktivieren und aktiviert von reaktiver Form Winkel 2+
1. Deaktivieren
<input class="form-control" name="Firstname" formControlName="firstname" [attr.disabled]="true">
Ermöglichen
Aktivieren Sie das gesamte Formular
this.formname.enable();
Aktivieren Sie nur ein bestimmtes Feld
this.formname.controls.firstname.enable();
Das funktioniert gut. Kommentar für Fragen.
quelle