How to disable a form control in Angular

Disabling form controls in Angular enables dynamic form behavior, preventing user input under specific conditions and improving user experience flow. With over 25 years of experience in software development and as the creator of CoreUI, I’ve implemented dynamic form control states in numerous conditional forms and wizard interfaces. From my expertise, the most reliable approach is using the disable() and enable() methods on form controls, or setting the disabled state during form creation. This pattern provides programmatic control over form interactivity based on application logic and user permissions.

Use the disable() and enable() methods on form controls to programmatically control input accessibility.

export class UserFormComponent {
  userForm = this.fb.group({
    email: ['', Validators.required],
    isAdmin: [false],
    adminCode: [{value: '', disabled: true}, Validators.required]
  })

  constructor(private fb: FormBuilder) {
    this.userForm.get('isAdmin')?.valueChanges.subscribe(isAdmin => {
      const adminCodeControl = this.userForm.get('adminCode')
      if (isAdmin) {
        adminCodeControl?.enable()
      } else {
        adminCodeControl?.disable()
      }
    })
  }

  disableForm() {
    this.userForm.disable()
  }

  enableForm() {
    this.userForm.enable()
  }
}

Here {value: '', disabled: true} sets the initial disabled state when creating the form control. The valueChanges subscription dynamically enables or disables the admin code field based on the checkbox state. The disable() method makes the control non-interactive and excludes its value from form submission, while enable() restores normal functionality. You can also disable entire forms using this.userForm.disable().

Best Practice Note:

This is the same approach we use in CoreUI Angular components for conditional fields, permission-based forms, and progressive disclosure patterns. Remember that disabled controls are excluded from form values - use getRawValue() instead of value if you need to include disabled control values in your data processing.


Speed up your responsive apps and websites with fully-featured, ready-to-use open-source admin panel templates—free to use and built for efficiency.


About the Author

Subscribe to our newsletter
Get early information about new products, product updates and blog posts.
How to round a number to two decimal places in JavaScript
How to round a number to two decimal places in JavaScript

How to loop through a 2D array in JavaScript
How to loop through a 2D array in JavaScript

How to change opacity on hover in CSS
How to change opacity on hover in CSS

How to Manage Date and Time in Specific Timezones Using JavaScript
How to Manage Date and Time in Specific Timezones Using JavaScript

Answers by CoreUI Core Team