[英]Enable a disabled input field by default when checkbox is checked in angular
我正在 Angular 13 中創建一個帶有復選框的表單組。這里,默認情況下禁用接收者代碼字段。 如何在復選框被選中時啟用此輸入字段,而在未選中時禁用?
在 my.ts 我有:
export class IntPayComponent implements OnInit {
paymentDetails!: FormGroup;
disabled = true;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.paymentDetails = this._formBuilder.group({
receiver_code: new FormControl({value:"", disabled: true})
});
}
在我的 html 模板中,我有:
<mat-stepper [linear]="isLinear" #stepper>
<mat-step [stepControl]="paymentDetails">
<form [formGroup]="paymentDetails">
<div class="add-directory">
<mat-checkbox>Add to Directory</mat-checkbox>
</div>
<div class="reference-field">
<mat-form-field appearance="fill" floatLabel="always">
<mat-label>Receiver Code</mat-label>
<input matInput formControlName="receiver_code"/>
</mat-form-field>
</div>
</form>
</mat-step>
</mat-stepper>
你需要把復選框變成一個 FormControl,比如addDirectory
:
this.paymentDetails = this._formBuilder.group({
receiver_code: new FormControl({value:"", disabled: true}),
addDirectory: new FormControl(false)
});
然后,在FormGroup
初始化之后,你監聽它的valueChanges
Observable 並相應地修改receiver_code
的 disabled state:
this.paymentDetails.get('addDirectory').valueChanges.pipe(
takeUntil(this.destroy$), // make sure you implement an unsubscribe strategy
tap(addCtrlValue => {
const receiverCtrl = this.paymentDetails.get('receiver_code');
addCtrlValue ? receiverCtrl.enable() : receiverCtrl.disable();
})
).subscribe();
您可以通過將FormControls
設置為獨立於FormGroup
來使事情變得更清晰,這意味着您不必繼續調用get
來訪問它們。
另外,僅供參考,在使用反應式 forms 時,您不要使用 HTML disabled
屬性。毫無疑問,Angular 已在控制台中顯示了關於此的警告。
您可以簡單地使用 mat-checkbox 的“輸出”更改
<mat-checkbox (change)="paymentDetails.get('receiver_code')
[$event.checked?'enable':'disable']()">
Add to Directory
</mat-checkbox>
如果您使用簡單的輸入類型復選框(或者您不想使用(更改)事件 -
<mat-checkbox [ngModel]="enable"
[ngModelOptions]="{standalone:true}"
(ngModelChange)="enable=$event;
paymentDetails.get('receiver_code')[$event?'enable':'disable']()"
>Add to Directory</mat-checkbox>
查看兩種方法的堆棧閃電戰
注意:並不總是需要“改變”我們的 FormGroup。 如果只想更改 .html 的“外觀”,最好使用不屬於 FormGroup 的新變量或其他方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.