С Angular (4.x) я использую ReactiveForms, и я подписался на valueChanges на моем FormControl ("enter") следующим образом:
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 })
, и когда она закончила загрузку, она снова this.form.disable({ emitEvent: false })
всю форму: this.form.disable({ emitEvent: false })
Но у меня также есть логика, которая в зависимости от разных флагов устанавливает, что FormControl включен/отключен: this.formControl.enable( {emitEvent: false});
Проблема, которую я сейчас вижу, заключается в том, что когда Form
, изменяет статус, он запускает FormControl.valueChanges
, хотя я предоставляю флаг emitEvent: false
.
Это ожидаемое поведение или ошибка? Я ожидал, что никакое событие не будет запущено вообще при предоставлении флага?
Я сделал плунж, где это можно протестировать здесь: https://plnkr.co/edit/RgyDItYtEfzlLVB6P5f3?p=preview