♻️ AngularJS Dynamic Forms – Create Flexible, Data-Driven Forms (2025 Guide)
🧲 Introduction – Why Learn AngularJS Dynamic Forms?
Static forms are fine for simple applications, but modern web apps often need forms that adapt dynamically to user input, configuration data, or external APIs. With AngularJS, you can build dynamic forms that render fields, apply validations, and control visibility—all based on JavaScript configuration objects or runtime logic.
Dynamic forms are perfect for:
- Form builders
- Surveys and questionnaires
- Admin dashboards
- Forms based on API responses
🎯 In this guide, you’ll learn:
- How to create forms dynamically from JSON or object configuration
- How to bind dynamic fields with
ng-model - How to apply validations and handle dynamic
ng-repeat - Best practices for building scalable, reusable dynamic forms
📘 What Are Dynamic Forms in AngularJS?
A dynamic form is one where the fields, types, and validations are generated at runtime using a configuration object—rather than hardcoding the HTML structure.
This approach makes forms:
- Easier to maintain
- Reusable across different use cases
- Adaptable to user roles or business logic
📋 Basic Dynamic Form Configuration
Let’s say we have a field config like this:
$scope.formFields = [
{ label: "Username", type: "text", model: "username", required: true },
{ label: "Email", type: "email", model: "email", required: true },
{ label: "Age", type: "number", model: "age", required: false }
];
$scope.user = {};
🧪 Generating the Form Using ng-repeat
<form name="dynamicForm" ng-submit="submit(user)">
<div ng-repeat="field in formFields">
<label>{{ field.label }}</label>
<input type="{{ field.type }}"
name="{{ field.model }}"
ng-model="user[field.model]"
ng-required="field.required" />
<span ng-show="dynamicForm[field.model].$touched && dynamicForm[field.model].$invalid">
{{ field.label }} is required.
</span>
</div>
<button type="submit" ng-disabled="dynamicForm.$invalid">Submit</button>
</form>
Controller Method:
$scope.submit = function(data) {
console.log("Form Data:", data);
};
✅ This form is fully generated based on formFields.
🔄 Adding Dynamic Validations
Update your config with validations:
$scope.formFields = [
{ label: "Password", type: "password", model: "password", required: true, minlength: 6 },
{ label: "Phone", type: "text", model: "phone", pattern: /^[0-9]{10}$/, required: true }
];
Updated Input Directive in HTML:
<input type="{{ field.type }}"
name="{{ field.model }}"
ng-model="user[field.model]"
ng-required="field.required"
ng-minlength="field.minlength"
ng-pattern="field.pattern" />
🧾 Now validations are automatically applied based on the config.
🎨 Dynamic Field Types: Select, Textarea, Radio
✅ Dropdown (Select):
$scope.formFields = [
{
label: "Country",
type: "select",
model: "country",
required: true,
options: ["India", "USA", "UK"]
}
];
HTML:
<select name="{{ field.model }}" ng-model="user[field.model]" ng-required="field.required">
<option ng-repeat="opt in field.options" value="{{ opt }}">{{ opt }}</option>
</select>
✅ Textarea:
<textarea ng-if="field.type === 'textarea'" ng-model="user[field.model]"></textarea>
✅ Radio Buttons:
<label ng-repeat="opt in field.options">
<input type="radio" ng-model="user[field.model]" name="{{ field.model }}" value="{{ opt }}"> {{ opt }}
</label>
🧠 Real-World Use Case – Survey Form from JSON
$scope.formFields = [
{ label: "Name", model: "name", type: "text", required: true },
{ label: "Gender", model: "gender", type: "radio", required: true, options: ["Male", "Female"] },
{ label: "Feedback", model: "feedback", type: "textarea", required: false }
];
✅ This setup can be fetched from a backend and rendered using a single AngularJS view.
🛠️ Best Practices for Dynamic Forms
✔️ Use ng-repeat to loop through field configs
✔️ Add validation flags (required, pattern, etc.) to config
✔️ Use ng-switch or ng-if to render specific field types
✔️ Always bind to a central object like $scope.user
✔️ Disable submit button using form.$invalid
📌 Summary – Recap & Next Steps
AngularJS dynamic forms are an efficient way to generate and validate complex forms on-the-fly. Whether you’re building a survey builder, onboarding system, or configurable admin panel, dynamic forms save time and reduce duplication.
🔍 Key Takeaways:
- Use field config objects to drive form generation
- Apply validation rules dynamically
- Use
ng-modelandng-repeatto bind data - Handle inputs like select, radio, textarea, etc.
⚙️ Real-world Relevance:
Widely used in CRMs, CMSs, form builders, surveys, settings pages, and workflow-based web apps.
❓ FAQ – AngularJS Dynamic Forms
❓ What is a dynamic form in AngularJS?
✅ A form built at runtime using a configuration object instead of hardcoded HTML.
❓ Can I apply different validations dynamically?
✅ Yes, use ng-required, ng-minlength, ng-pattern, etc., based on your field config.
❓ How do I handle different input types like dropdowns or radios?
✅ Use ng-if or ng-switch in your form rendering logic to display fields based on the type key.
❓ Is it possible to fetch form configuration from a server?
✅ Absolutely. You can fetch a JSON config from an API and render the form accordingly.
Share Now :
