首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选中角复选框时,默认启用禁用输入字段。

选中角复选框时,默认启用禁用输入字段。
EN

Stack Overflow用户
提问于 2022-04-11 11:17:02
回答 2查看 1.3K关注 0票数 1

我正在创建一个表单组,其中有一个角13的复选框。在这里,默认情况下,接收代码字段是禁用的。当复选框被选中时,我如何启用此输入字段?如果不启用,如何启用此输入字段?

在我的.ts中有:

代码语言:javascript
复制
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模板中有:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2022-04-11 11:34:36

您需要将复选框设置为FormControl,比如addDirectory

代码语言:javascript
复制
this.paymentDetails = this._formBuilder.group({
  receiver_code: new FormControl({value:"", disabled: true}),
  addDirectory: new FormControl(false)
});

然后,在FormGroup初始化之后,您可以侦听它的valueChanges,并相应地修改receiver_code的禁用状态:

代码语言:javascript
复制
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才能访问它们。

另外,FYI,您在使用反应性表单时不使用disabled属性。毫无疑问,角已经在控制台中显示了这方面的警告。

票数 0
EN

Stack Overflow用户

发布于 2022-04-12 06:45:18

您只需使用垫子复选框的“输出”更改即可。

代码语言:javascript
复制
<mat-checkbox (change)="paymentDetails.get('receiver_code')
           [$event.checked?'enable':'disable']()">
      Add to Directory
</mat-checkbox>

如果使用的是简单输入类型复选框(或不使用(更改)事件),也可以使用简单复选框。

代码语言:javascript
复制
  <mat-checkbox [ngModel]="enable" 
                [ngModelOptions]="{standalone:true}"
                (ngModelChange)="enable=$event;
                  paymentDetails.get('receiver_code')[$event?'enable':'disable']()"

  >Add to Directory</mat-checkbox>

请参阅带有两个参数的stackblitz

注意:并不总是需要“更改”我们的FormGroup。如果只想更改.html的“外观”,最好使用不属于FormGroup或其他方法的新变量

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71826870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档