Я попытался создать валидатор пароля для сравнения
comparePassword():{[s:string]:boolean}{
console.log(this.formGroup);
const password1 = this.formGroup.value.txtPassword1;
const password2 = this.formGroup.value.txtPassword2;
if(password1 === password2){
return {passwordMismatch:true}
}
return null;
}
, и когда я добавил это в массив валидаторов formControl, я использовал метод связывания, чтобы он указывал на правильный контекст, но он указывал на глобальный контекст, в то время как всреда выполнения, которая приводит к ошибке при попытке доступа к this.formGroup.value.txtPassword1 и this.formGroup.value.txtPassword2, так как this.formGroup не определено
import { Component, OnInit, EventEmitter } from '@angular/core';
import { NgbActiveModal, NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
constructor(private modalService: NgbModal) {
this.formGroup = new FormGroup({
txtUserName: new FormControl('', Validators.required),
txtPassword1: new FormControl('', Validators.required),
txtPassword2: new FormControl('', [Validators.required, this.comparePassword.bind(this)])
});
}
formGroup: FormGroup;
ngOnInit() {
}
closeModal:EventEmitter<String>;
closeResult: string;
isLogin:boolean;
open(content,option) {
console.log(option);
if (option) {
this.isLogin = option === 'Login' ? true : false;
console.log(this.isLogin);
}
this.modalService.open(content, { ariaLabelledBy: 'modal-basic-title' }).result.then((result) => {
// this.closeResult = `Closed with: ${result}`;
}, (reason) => {
//this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
});
}
Submit(){
console.log(this.formGroup);
// this.formGroup.reset();
}
comparePassword():{[s:string]:boolean}{
console.log(this.formGroup);
const password1 = this.formGroup.value.txtPassword1;
const password2 = this.formGroup.value.txtPassword2;
if(password1 === password2){
return {passwordMismatch:true}
}
return null;
}
}
Почему это указывает на глобальный контекстдаже после использования метода связывания
мне очень трудно понять, что когда я уравновешиваю значение этого значения внутри валидатора, внутри него есть formControl, но прилагается скриншот
но когда я анализировал свойства объекта через for, во всем были перечислены даже свойства в цепочке прототипов, но не formGroup
Самое странное, что когда я утешаю этона самом деле внутри него есть formGroup, но если я попытаюсь получить к нему доступ, используя this.foВместо этого rmGroup дает мне неопределенное значение
Может кто-нибудь объяснить это, я думаю, что это был бы простой подход, если бы я мог найти ответ на этот вопрос, поскольку он может помочь многим людям, которые ищут простое сравнение паролей