“修复:此问题是一个漏洞,在6.0.0及以上版本和5.2.5中已经得到修复,详见GH问题:github.com/angular/angular/issues/12366。”
“在Angular(4.x)中,我使用ReactiveForms,并订阅了我的FormControl('input')上的valueChanges,如下所示:”
现在我可以对FormControl的值进行更改并做出反应,但是当然我需要从某个地方填充表单的值,所以我使用
由于这不是用户更改,因此我不想对其做出反应,因此添加标志
这像预期的那样工作。
现在我有一些逻辑,当表单正在加载时,我将整个表单设置为禁用状态:
我现在遇到的问题是,当
这是期望的行为还是一个错误?我希望在提供标志时根本不触发任何事件?
我已经创建了一个 plunk 以进行测试: https://plnkr.co/edit/RgyDItYtEfzlLVB6P5f3?p=preview
“在Angular(4.x)中,我使用ReactiveForms,并订阅了我的FormControl('input')上的valueChanges,如下所示:”
export class App {
version:string;
formControl = new FormControl('default', []);
form = this.fb.group({
input: this.formControl,
input2: ('',[])
});
constructor(private fb: FormBuilder) {
this.version = `Angular v${VERSION.full}`
}
ngOnInit() {
this.formControl.valueChanges.subscribe(value => doSomething(value));
}
现在我可以对FormControl的值进行更改并做出反应,但是当然我需要从某个地方填充表单的值,所以我使用
form.patchValue(data)
来实现。由于这不是用户更改,因此我不想对其做出反应,因此添加标志
emitEvent: false
,如:this.form.patchValue(data, {emitEvent: false})
。这像预期的那样工作。
现在我有一些逻辑,当表单正在加载时,我将整个表单设置为禁用状态:
this.form.disable({ emitEvent: false })
,加载完成后会再次将整个表单设置为启用状态:this.form.disable({ emitEvent: false })
但是我还有一些逻辑,根据不同的标志设置FormControl的启用/禁用状态:this.formControl.enable( {emitEvent: false});
。
我现在遇到的问题是,当
Form
更改状态时,即使我提供了 emitEvent: false
标志,它也会触发 FormControl.valueChanges
。这是期望的行为还是一个错误?我希望在提供标志时根本不触发任何事件?
我已经创建了一个 plunk 以进行测试: https://plnkr.co/edit/RgyDItYtEfzlLVB6P5f3?p=preview