2017-08-02 28 views
0

如何使角只讀一個formControl如何使formControl只讀

我知道我能做到這一點的HTML像

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

如何從JS代碼做到這一點,在一個不是HTML即模型驅動方式

+2

您可以通過'this.form.controls.name.disable({onlySelf:true});'設置**禁用**,但是到目前爲止我沒有發現任何「只讀」。 – Pengyy

+2

這裏是一個相關的問題: https://github.com/angular/angular/issues/11447,似乎現在沒有提供。 – Pengyy

回答

3

我們可以使用任何html屬性並使用[]以角度綁定它。

所以,你可以使用屬性readonly屬性結合在控制

e.g

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

+0

問題是如何以模型驅動的方式添加只讀字段?請仔細閱讀問題 –

+0

不好意思,這個問題還不清楚。 – Steve

+0

我想,*如何從JS代碼而不是HTML *就足夠了。 –

0

你可以(應該)禁用由SE組件的控制,由HTML非。

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

標籤上使用readonly會產生安全問題的警告。

+0

這將使控制值不可用在this.myForm.value –

+0

是的。但是,您可以獲得原始表單值,並通過這種方式可以獲得該控件的值。使用myForm.getRawValue()。所以,你可以這樣做:const formValue = Object.assign(myForm.getRawValue(),myForm.value); –

+0

使用禁用有其他含義,我認爲readonly更適合輸入。更多信息:https://stackoverflow.com/questions/7730695/whats-the-difference-between-disabled-disabled-and-readonly-readonly-for-ht/7730719#7730719 – Anthony

0

如果使用無表單,您可以指定它動態地像 下面的示例代碼(電子郵件域)

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], 
}); 

如果你想獲得的所有,包括你應該禁用的控件的值使用:

this.registerForm.getRawValue(); 

享受編碼!