Reactive form instances like FormGroup and FormControl have a valueChanges method that returns an observable that emits the latest values. You can therefore subscribe to valueChanges to update instance variables or perform operations.
Take a look at our intro to Reactive Forms if this is all new to you.
Here we’ll create a very simple example that updates a template string every time a value changes in the form.
First, let’s initialize our reactive form with FormBuilder:
myForm: FormGroup;
formattedMessage: string;
constructor(private formBuilder: FormBuilder) {}
ngOnInit() {
this.myForm = this.formBuilder.group({
name: '',
email: '',
message: ''
});
this.onChanges();
}
Notice how we call an onChanges method in the ngOnInit lifecycle hook after having initialized our form. Here’s the content of our onChanges method:
onChanges(): void {
this.myForm.valueChanges.subscribe(val => {
this.formattedMessage =
`Hello,
My name is ${val.name} and my email is ${val.email}.
I would like to tell you that ${val.message}.`;
});
}
You can also listen for changes on specific form controls instead of the whole form group:
onChanges(): void {
this.myForm.get('name').valueChanges.subscribe(val => {
this.formattedMessage = `My name is ${val}.`;
});
}
🌌 Since valueChanges returns an observable, thy sky is pretty much the limit in terms of what you can do with the values that are emitted.