2017-08-02 3 views
0

Wie eine Formcontrol in Winkeln Nur-Lese-Wie man einen Formcontrol macht nur lesbar

ich mich es in html wissen machen wie

<input type="text" formControlName="xyz" readonly /> 

, wie es von JS-Code zu tun und nicht HTML dh in einem Modell angetrieben Weg

+2

Sie können ** disabled ** durch 'this.form.controls.name.disable ({onlySelf: true});' einstellen, aber bisher habe ich noch nichts für 'readonly' gefunden. – Pengyy

+2

und hier ist ein relevanter Sachverhalt: https://github.com/angular/angular/issues/11447, scheint es ist nicht im Moment zur Verfügung gestellt. – Pengyy

Antwort

3

Wir können jedes HTML-Attribut verwenden und binden es in eckigen mit [].

So können Sie Attribut verbindlich für das Attribut verwenden readonly in diesem Steuer

beispiels

<input type="text" formControlName="xyz" [readonly]="anyBooleanPropertyFromComponent" />

+0

Die Frage ist, wie kann das schreibgeschützte Feld modellgesteuert hinzugefügt werden? Bitte lesen Sie die Frage sorgfältig –

+0

Tut mir leid, aber die Frage war nicht klar. – Steve

+0

Ich denke, * wie es aus JS-Code und nicht aus HTML * zu tun ist genug. –

0

können Sie (sollten), um die Steuerung durch se Komponente, nicht von der HTML deaktivieren.

this.form.get('controlName').disable();

Verwendung von readonly auf Tag wird eine Warnung über Sicherheitsfragen erzeugen.

+0

das macht den Steuerwert nicht verfügbar in this.myForm.value –

+0

Ja. Aber Sie können den Rohformwert erhalten und auf diese Weise wird der Wert dieses Steuerelements verfügbar sein. Verwenden Sie myForm.getRawValue(). So können Sie das tun: const formValue = Object.assign (myForm.getRawValue(), myForm.value); –

+0

Die Verwendung von deaktiviert hat andere Auswirkungen und ich denke, dass Readonly besser für Eingaben geeignet ist. Weitere Informationen: https://stackoverflow.com/questions/7730695/whats-the-difference-between-disabled-disabled-and-readonly-readonly-for-ht/7730719#7730719 – Anthony

0

Wenn Sie Reactive Forms verwenden, können Sie es dynamisch zuweisen wie in der Beispielcode unten (E-Mail-Feld)

this.registerForm = this.formBuilder.group({ 
     first_name: ['', Validators.required], 
     last_name: ['', Validators.required], 
     email: new FormControl({value: null, disabled: true}, Validators.required), 
     password: ['', Validators.compose([Validators.required, Validators.email])], 
     confirm_password: ['', Validators.required], 
}); 

Wenn Sie möchten, auch Sie sollten deaktiviert Kontrollen alle Werte erhalten Verwendung:

this.registerForm.getRawValue(); 

Viel Spaß beim Codieren!