【问题标题】:Disable a text input in an angular 2 reactive form以 Angular 2 反应形式禁用文本输入
【发布时间】:2018-11-10 15:59:56
【问题描述】:

我有一个 Angular 2 的响应式表单,可以通过添加按钮调用新表单或通过编辑按钮更新现有详细信息。如果用户选择编辑按钮,则应禁用电子邮件输入。我有下面的代码,但只要用户选择编辑,输入就不会被禁用。如果我在 addForm 方法中将 disabled 设置为 true 并选择编辑按钮,则电子邮件输入被禁用

    public addForm(event: string) : FormGroup {

            this.userForm = this.fb.group({
                firstName: ['',
                    [   Validators.required,
                        Validators.maxLength(ManageUsersConstants.maxLengthName)
                    ]],
                lastName: ['',
                    [   Validators.required,
                        Validators.maxLength(ManageUsersConstants.maxLengthName)]
                    ],
                email: [{value: '', disabled : false}],
                }),
            });
        }
  

    public editForm(event: string, editValues : any) : FormGroup {
        this.userForm = this.fb.group({
            firstName: [editValues.firstName, [
                Validators.required,
                Validators.maxLength(ManageUsersConstants.maxLengthName)]],
            lastName: [editValues.lastName,
                [   Validators.required,
                    Validators.maxLength(ManageUsersConstants.maxLengthName)]],
            email: [{value: editValues.email, disabled: true}],
        });

    }

【问题讨论】:

  • 看起来您只是在重新分配表单。为什么不直接针对输入并进行更改呢? this.userForm.get('email').disable();(我想,一点都没碰过????)
  • 对不起,你的意思是直接针对输入? html?
  • 我的意思是定位来自 FormGroup 的电子邮件(就像我上次评论中的代码位)
  • 我试过了,还设置/补丁,但它似乎仍然将其设置为 false

标签: angular angular2-forms angular-reactive-forms


【解决方案1】:

在编辑事件中添加以下代码this.formGroup.controls['email'].disable() ;

Component.ts

 ngOnInit() {
    this.formGroup = this.formBuilder.group({
      email: [{value: '', disabled : false}]      
    });  
  }  

  onEdit(){    
    this.formGroup.controls['email'].disable()   
  }

HTML

<form [formGroup]="formGroup" (ngSubmit)="onSubmit()" #form>
    <div>
      <label for="dateone">Email: </label>
      <input formControlName="email" #email/>          
      <button type="button" (click)="onEdit()">edit</button>  
      </div>
</form>

Stackblitz demo

【讨论】:

  • 快速问题,我将该行代码添加到编辑中并且它可以工作,但是每当我再次单击添加时,输入被禁用。我在 - this.userForm.controls['email'].enable(); 中添加了这行代码- 创建表单后但仍处于禁用状态。如果我在创建表单之前添加它,我会得到一个未定义
  • 得到它的工作,只是添加了一个检查以确保它不是未定义的,并将其移动到创建表单之前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2017-07-21
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多