Понимание статических методов внутри класса Validation в angular4

Я начинаю изучать управляемые моделями формы в угловых и когда я просматривал документацию управляемых моделями форм, я нашел это

component.ts

 this.myForm= this.fb.group({
      'contact':['',Validators.required]
    }); 

Теперь, когда я пошел к определению класса валидатора, я нашел это

export declare class Validators {
...
static required(control: AbstractControl): ValidationErrors | null;
...
}

Это объясняет, что требуется статический метод в классе валидатора, и в качестве параметра требуется AbstractControl. но почему тогда мне разрешено использовать его без передачи каких-либо параметров внутри него.

1 ответ

Решение

Обязательный метод возвращает карту ошибок со свойством 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.

Другие вопросы по тегам