Обязательный метод возвращает карту ошибок со свойством required: {'required':true}
, если значение control: AbstractControl
пусто, и null
, если его нет.
.
Из углового исходного кода: https://github.com/angular/angular/blob/6.1.9/packages/forms/src/validators.ts#L133-L154
static required(control: AbstractControl): ValidationErrors|null {
return isEmptyInputValue(control.value) ? {'required': true} : null;
}
.
Причина, по которой вы можете передать Validators.required без скобок и параметров, заключается в том, что Typescript является надмножествомJavascript, который может хранить функции как переменные:
var Foo = function (control: AbstractControl)
{
return anyVal;
};
Это то же самое, что и:
Foo(control: AbstractControl): any
{
return anyVal;
};
Таким образом, это полностью допустимо
var Bar = Foo;
И потомуфункция - это просто переменная, содержащая исполняемый код, мы можем сохранить функцию в нескольких переменных или передать ее в качестве параметра, что и делается в FormControl.
В общем, когда вы делаете
const control = new FormControl('', Validators.required);
Вы не выполняете требуемый метод, потому что метод выполняется только тогда, когда добавляются скобки и параметры.Вместо этого вы передаете саму функцию Validator.