无法从Angular OnInit方法访问父对象?

时间:2019-09-05 03:50:02

标签: angular typescript

我正在尝试将自定义验证器附加到Angular Form Control。我正在ngOnInit方法中初始化窗体控件。该验证器应检查是否已为字段提供输入(类似于Validators.required),但仅当布尔类成员this.shouldCheck为true时。

但是,当我尝试从验证器函数访问该类成员时,它找不到this的实例。我知道Js中的this存在一些臭名昭著的作用域问题,但我认为可以通过Typescript解决。不知道如何在验证器中检查该布尔值。

我的component.ts:

// this shouldCheck's value is bound to a checkbox on the form
private shouldCheck: boolean = false;

constructor(private formBuilder: FormBuilder) {}

    ngOnInit() {
        this.employeeCreateForm = this.formBuilder.group({
            firstName: [null, [
                this.myRequiredValidator,
                Validators.maxLength(30),
                Validators.pattern('[^<|]+$')]],
            lastName: [null, [
                this.myRequiredValidator,
                Validators.maxLength(40),
                Validators.pattern('[^<|]+$')]]
        }

我的自定义验证器:

myRequiredValidator(control: AbstractControl): ValidationErrors | null {
        // if shouldCheck, perform a basic "required field" validation
        if (this.shouldCheck) {
            return !!control.value ? null : {required: true};
        }
        // else, don't apply validation error
        return null;
    }

无论我在哪里初始化shouldCheck,验证器函数都无法解析this,因此甚至无法实例化FormGroup。

我尝试使用简单的null检查:

if (this && this.shouldCheck) {
    // do validation
}

...这允许构造FormGroup,但即使在初始化表单之后,它似乎也无法解析this。我知道ngOnInit在类构造函数之后运行,因此无论如何都不应该是问题,但这就是我想尝试的全部。

谢谢。

1 个答案:

答案 0 :(得分:0)

$ ./bin/main file.txt
5 7 2 5 2
2 1 5 6 1
2 4 7 4 3
2 3 5 6 5
2 3 5 3 5

cell_init