Понимание статических методов внутри класса Validation в angular4 - PullRequest
0 голосов
/ 07 октября 2018

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

component.ts

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

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

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

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

1 Ответ

0 голосов
/ 07 октября 2018

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

...