是的,您是对的,问题是因为您在变量 ( this.form) 尚未启动时引用了它。幸运的是,在您的情况下,您实际上并不需要在val2表单控件中引用表单组。您的代码可以重写如下:
let val1Control = this.formBuilder.control('', Validators.required);
this.form = this.formBuilder.group({
val1: val1Control ,
val2: [{value:'', disabled: val1Control.valid}]
});
但是,此块仅启动disabledval2 控制的值,而不监控val1Control的有效性。为此,您需要订阅val1Control.statusChanges:
let val1Control = this.formBuilder.control('', Validators.required);
let val2Control = this.formBuilder.control({value:'', disabled: !val1Control.valid});
this.form = this.formBuilder.group({
val1: val1Control,
val2: val2Control
})
val1Control.statusChanges.subscribe((newStatus) => {
if (val1Control.valid) {
val2Control.enable();
} else {
val2Control.disable();
}
});
这是工作的 plunker:http ://plnkr.co/edit/kEoX2hN9UcY4yNS3B5NF