Form handling is a complex problem. One of the main reasons AngularJS got so successful is that two-way bindings and ng-model provided a good solution for it. But there were some downsides, mainly complex forms built with ng-model made the data flow of the application hard to follow and debug. Angular 2+ builds up on the ideas from Angular 1, but avoids its problems.
NgModel and friends are no longer part of the core framework. The @angular/core package only contains the primitives we can use to build a form-handling module. Instead, Angular has a separate package—@angular/forms—that comes with FormsModule and ReactiveFormsModule that provide two different styles of handling user input.
Both the modules depend on the form model consisting of FormControl, FormGroup, and FormArray. Having this UI-independent model, we can model and test input handling without rendering any components.
Finally...