Everything you need to know about Change Detection

Introduction

Angular is a TypeScript-based open-source web application framework led by the Angular Team at Google and by a community of individuals and corporations. Change Detection is the core part of the angular.

Story

Web applications these days are designed to be interactive. Whenever the state of application changes, the code should detect and handle the changes and reflect the changes in the Web User Interface. The mechanism is named as

Change Detection

Almost, all the popular web frameworks have this mechanism.

Why do you need to know about Change Detection?

Everyone who works in angular code should aware of Change Detection.

It’s an integral part of the application which deals with DOM updates whenever there is a change in model or data.

The performance of the application also depends on Change Detection as well.

What is Change Detection?

It is the mechanism designed to track changes in an application state and render the updated state on the screen.

Application Architecture

Normally, the architecture will contain

Data or Model → Template → DOM

Data will provide the data that need to be displayed, DOM will be showed in UI and a template will be used to fit the data into DOM.

The binding mechanism will happen under the hood which is the main part of this architecture. We are going to discuss it only.

The process of keeping the data in UI updated similar to the state of the application.

A quick example:

A live example can be found here.

 

In this example, we are change variable ‘name’ value using timeOut function() after 3 seconds.

Once we have changed the variable value, the UI automatically get refreshed without any delay.

How that happens?

That’s the work of the angular framework here. It tracks the value and reflects in the UI.

Frameworks take care of synchronization between the internal state of the application and the user interfaces for us.

When should change detection happen?

As soon as the application state changes. The application state can change in the following cases

  • Event callback
  • Network calls
  • Timers

Any asynchronous call can cause a change in application state and that’s the instance where we should update our state on UI.

A simple detectChange will look like this,

let detectChanges => () => {
  if(currentState != prevState) {
    updateView(currentState);
  }
}

ZoneJS

ZoneJS is an API that has been mostly ported out from the dart language.

Behind the scenes, ZoneJS monkey patches the function. Basically, it helps to keep an eye on all async tasks, and provide an ability to call code before or after a task has been completed. The Zone API has different hooks to place your code onBeforeTaskonAfterTaskonZoneCreatedonError.

var myZoneSpec = {
  beforeTask: function () {
    console.log('Before task');
  },
  afterTask: function () {
    console.log('After task');
  }
};

var myZone = zone.fork(myZoneSpec);
myZone.run(function() {
   console.log('My task successfully got executed.')
});

// Output:
// Before task
// My task successfully got executed.
// After task

So Angular uses the power of Zones to fire change detection. What happens is, if any asynchronous call happens, ZoneJS API emits data to the onMicrotaskEmpty observable, and angular calls the detectChanges method based on the same.

Change Detection Strategy

  1. Default
  2. OnPush

The strategy that the default change detector uses to detect changes. When set, takes effect the next time change detection is triggered.

Default

Use the default CheckAlways strategy, in which change detection is automatic until explicitly deactivated.

OnPush

Use the CheckOnce strategy, meaning that automatic change detection is deactivated until reactivated by setting the strategy to Default (CheckAlways). It can still be explicitly invoked. This strategy applies to all child directives and cannot be overridden.

Example

Let’s add OnPush option in the same example. Now the output will not render until there is a state of change happens in the application. You can find the example here.

OnPush

 

html

 

Happy Coding!

Explore more on Serverless Notes

Author: Pandiyan Murugan

A techie!!

Get notified about any future events

Interested in learning more about TechMeet360 or knowing about any future events? Sign up below to get notified.

Back to Top