Form handling can become a complex piece of code in any application. Angular's form model allows us to split the form handling and rendering into independent code. This separation allows for testing the form processing code without rendering the UI. This method of building forms is synchronous, giving you better control over the logic and validation aspects involved in processing a form. You typically come across two kinds of model with this approach—one is the UI form model and the other is the domain model. This separation of the data model from the UI also ensures that it isn't written to directly by the UI, providing for more control to revert changes and preserve the initial state if required.
After having initialized a form, it's also possible to subscribe to it for any changes:
this.userForm.valueChanges.subscribe...