Ich versuche, das disabled
Attribut von a zu verwenden formControl
. Wenn ich es in die Vorlage einfüge, funktioniert es:
<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input>
Aber der Browser warnt mich:
Es sieht so aus, als würden Sie das Attribut disabled mit einer reaktiven Formularanweisung verwenden. Wenn Sie beim Einrichten dieses Steuerelements in Ihrer Komponentenklasse deaktiviert auf true setzen, wird das Attribut disabled tatsächlich im DOM für Sie festgelegt. Wir empfehlen diesen Ansatz, um Fehler zu vermeiden, die nach Überprüfung geändert wurden.
Example: form = new FormGroup({ first: new FormControl({value: 'Nancy', disabled: true}, Validators.required), last: new FormControl('Drew', Validators.required) });
Also habe ich es in die FormControl
und aus der Vorlage gelöscht:
constructor(private itemsService: ItemsService) {
this._items = [];
this.myForm = new FormGroup({
id: new FormControl({value: '', disabled: true}, Validators.required),
title: new FormControl(),
description: new FormControl()
});
this.id = this.myForm.controls['id'];
this.title = this.myForm.controls['title'];
this.description = this.myForm.controls['description'];
this.id.patchValue(this._items.length);
}
Aber es funktioniert nicht (es deaktiviert das nicht input
). Was ist das Problem?
angular
typescript
FacundoGFlores
quelle
quelle
this.myForm.controls['id'].disable()
irgendwo in den Konstruktor zu setzen. Ich habe eine Bibliothek erstellt, die das Arbeiten mit dynamischen Formularen erleichtert: github.com/mat3e/dorfAntworten:
Ich habe verwendet,
[attr.disabled]
weil ich diese Vorlage immer noch als programmgesteuertes enable () / disable () mag, da sie IMO überlegen ist.Veränderung
zu
Wenn Sie auf neuerem Material sind, wechseln Sie
md-input
zumat-input
.quelle
[disabled]
und die Warnung in der Konsole funktioniert. Ich benutze Angular 4.1.3[attr.disabled]
das löst einfach nicht die Warnung aus, die[disabled]
zeigtSie können ein Formularsteuerelement mithilfe der folgenden Methoden aktivieren / deaktivieren:
control.disable () oder control.enable ()
Wenn das bei Ihnen nicht funktioniert hat, können Sie eine Direktive verwenden
Dann könnten Sie es so verwenden
Diese Technik wird hier beschrieben:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Ich hoffe es hilft
quelle
NgControl (`No provider for NgControl`)
Ich stellte fest, dass ich einen Standardwert haben musste, auch wenn es eine leere Zeichenfolge war, damit es funktionierte. Also das:
... musste das werden:
Siehe meine Frage (von der ich nicht glaube, dass sie ein Duplikat ist): Die Übergabe von 'disabled' im Formularstatusobjekt an den FormControl-Konstruktor funktioniert nicht
quelle
In meinem Fall mit Angular 8 . Ich wollte das Aktivieren / Deaktivieren des Eingangs je nach Bedingung umschalten.
[attr.disabled]
hat bei mir nicht funktioniert, also hier ist meine Lösung.Ich habe
[attr.disabled]
aus HTML entfernt und in der Komponentenfunktion diese Prüfung durchgeführt:quelle
Initialisierung (Komponente) mit:
Dann anstatt (Vorlage) zu verwenden:
Entfernen Sie einfach das deaktivierte Attribut:
Und wenn Sie Elemente anzeigen möchten, starten Sie (in der Komponente):
this.selector.enable();
quelle
Ich habe diese in Winkel 7 ausprobiert. Es hat erfolgreich funktioniert.
quelle
Zum einen macht formcontrol deaktivieren
Oder anfängliche Einstellmethode.
quelle
Verwenden Sie stattdessen [attr.disabled] [disabled], in meinem Fall funktioniert es in Ordnung
quelle
add disable = "true" zum HTML-Feld Beispiel: disable
quelle
Das Schöne an reaktiven Formen ist, dass Sie Werteänderungsereignisse für jedes Eingabeelement sehr einfach erfassen und gleichzeitig deren Werte / Status ändern können. Hier ist eine andere Möglichkeit, Ihr Problem mithilfe von zu lösen
enable
disable
.Hier ist die Komplettlösung auf stackblitz .
quelle
Das Deaktivieren von Mattenformularfeldern ist ausgenommen, wenn Sie die Formularvalidierung verwenden. Stellen Sie daher sicher, dass Ihr Formularfeld keine Validierungen wie (validators.required) enthält. Dies hat bei mir funktioniert. zum Beispiel:
editUserPhone: neues FormControl ({Wert: '', deaktiviert: true})
Dadurch können die Telefonnummern des Benutzers nicht bearbeitet werden.
quelle
Das war meine Lösung:
quelle
Nur wer reaktive Formulare verwendet: Für native HTML-Elemente [attr.disabled] funktioniert dies, für Materialelemente muss das Element jedoch dynamisch deaktiviert werden.
Andernfalls wird eine Warnmeldung in der Konsole angezeigt.
quelle
Wenn Sie in Angular-9 die Schaltfläche deaktivieren / aktivieren möchten, klicken Sie hier. Dies ist eine einfache Lösung, wenn Sie reaktive Formulare verwenden.
Definieren Sie eine Funktion in der Datei component.ts
Rufen Sie es von Ihrer component.html auf
z.B
quelle
Verwenden Sie beim Erstellen eines neuen Formularsteuerelements Folgendes:
Wenn Sie die Aktivität ändern möchten, verwenden Sie als Nächstes:
oder
quelle
füge deinem md-input ein name-Attribut hinzu. Wenn das Problem dadurch nicht behoben wird, veröffentlichen Sie bitte Ihre Vorlage
quelle
Ultimative Möglichkeit, dies zu tun.
quelle