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 =&gt; {

 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 =&gt; {

 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.