requiredDirective: (string | (($parse: any) => {
    require: string;
    restrict: string;
    link(scope: any, elm: any, attr: any, ctrl: any): void;
}))[] = ...

AngularJS expression. If it evaluates to true, it sets the required attribute to the element and adds the required ngModel.NgModelController#$validators validator.

ngRequired adds the required ngModel.NgModelController#$validators validator to ngModel ngModel. It is most often used for input input and select select controls, but can also be applied to custom controls.

The directive sets the required attribute on the element if the AngularJS expression inside ngRequired evaluates to true. A special directive for setting required is necessary because we cannot use interpolation inside required. See the guide/interpolation interpolation guide for more info.

The validator will set the required error key to true if the required attribute is set and calling ngModel.NgModelController#$isEmpty NgModelController.$isEmpty with the ngModel.NgModelController#$viewValue ngModel.$viewValue returns true. For example, the $isEmpty() implementation for input[text] checks the length of the $viewValue. When developing custom controls, $isEmpty() can be overwritten to account for a $viewValue that is not string-based.