Функция углового валидатора Показана как неопределенная - PullRequest
0 голосов
/ 15 октября 2019

Я использую Angular FormBuilder и использую свою собственную проверку. У меня есть formBuilder ...

this.form = this.formBuilder.group({
  password: ['', [Validators.required, this.matcher.strong]],
  confirmPassword: [''],
  action: 'newUser'
},{ validator: this.checkPasswords });

и функция checkPasswords

checkPasswords(group: FormGroup) {
  let pass = group.get('password').value;
  let confirmPassword = group.get('confirmPassword').value;

  this.isTrue = true;
}

Когда я вызываю this.isTrue, я получаю следующую ошибку. Cannot set property 'isTrue' of undefined. Если я уберу функцию checkPasswords из валидатора, то она будет работать нормально. Почему это происходит?

Спасибо

1 Ответ

0 голосов
/ 15 октября 2019

Вы не можете получить доступ к this, поступая так, потому что это выходит за рамки. Позвольте мне привести пример:

class Foo {
    bar = 'biz'
    a() {
       console.log(this.bar);
        return this.b;
    }
    aWorkaround() {
        return this.b.bind(this);
    }
    b() {
        console.log(this.bar);
    }
}

const obj = new Foo();

const func = obj.a();
// console shows "biz"
func();
// error: cant access bar of undefined

const funcWorkaround = obj.aWorkaround();
funcWorkaround();
// Console shows "biz"

Проблема в том, что вы делаете свой код очень запутанным, а не повторно используемым (представьте себе, что вы используете тот же валидатор для другого компонента, у которого нет этого свойства).

Это сработает, но если вам нужно это сделать, возможно, вы усложняете работу своего кода.

...