Introduction
The component is class with the template, which deals with the View of Application and it’s containing the core logic of the page. We can compare it with the Controller in Angular 1.x. We need to write the Application logic inside the class, which is used by the View. The component class interacts with the View through Methods and Properties of API.
Angular 1.x concept such as directives, controllers and scope are combined into component. In other words we can say, component refers to directives, which are always associated with the template directly.
Component Lifecycle
Angular is a managed component lifecycle by itself. Angular is able to create and render the component. It also renders the component children and also updates the data, when associated model is changed and Angular destroys the component before removing from the DOM.
Angular component lifecycle hooks provide us visibility into the important moments and we can do some custom activity, when they are raised. Angular will call lifecycle hook only if it is defined.
Following are life cycle sequence for the directive and component.
Name of event (hook) |
Applicable to directive/ component/ both |
Description |
ngOnChanges |
both |
It occurrs, when Angular sets the data bound property. Here, we can get the current and previous value of the changed object. It is raised before the initialization of an event for the component/ directive. |
ngOnInit |
both |
It occurrs after Angular initializes the data-bound input properties. |
ngDoCheck |
both |
It is raised every time, when Angular detects any change. |
ngAfterContentInit |
Component only |
It is raised after projecting the external content into the component. |
ngAfterContentChecked |
Component only |
After the content initialization, Angular checks the bindings of the external component which is used in to view at this time this event is raised. |
ngAfterViewInit |
Component only |
This event is raised after Angular creates the view defined by the component. |
ngAfterViewChecked |
Component only |
This event is raised after Angular checks the bindings of the view(s) defined by the component. |
ngOnDestroy |
both |
It is used for the cleanup purpose and it is raised just before Angular destroys the directive / component. It is very much important in the memory leak issue by Unsubscribe observables and detach the event handlers |
Example
In this example, I have declared all the life cycle events for the component as following. In all the events, I have just written down the name of the event in the console, using “console.log” JavaScript function.
Component file
- import {
- Component
- } from '@angular/core';
- @Component({
- selector: 'test-app',
- template: '<h1>This is my Angular 2 Application</h1>' + '<br/>' + '<other-comp>loading...</other-comp>'
- })
- export class AppComponent {
- ngOnChanges() {
- console.log('ngOnChanges');
- }
- ngOnInit() {
- console.log('ngOnInit');
- }
- ngDoCheck() {
- console.log('ngDoCheck');
- }
- ngAfterContentInit() {
- console.log('ngAfterContentInit');
- }
- ngAfterContentChecked() {
- console.log('ngAfterContentChecked');
- }
- ngAfterViewInit() {
- console.log('ngAfterViewInit');
- }
- ngAfterViewChecked() {
- console.log('ngAfterViewChecked');
- }
- ngOnDestroy() {
- console.log('ngOnDestroy');
- }
- }
When we run the Application, using "npm start" command, the component is rendered by the Angular and also Angular executes the implemented event sequentially.
As we have seen here, the "ngOnDestroy" event is not executed by Angular because Angular will call this event, when it is going to destroy the component. Normally page component will destroy when navigation change.
Component Vs Directive
Component is look like the directive. Same as directive, component is also contains template and business logic. Following is different between component and directive.
Component |
Directive |
Component is a directive that used to shadow DOM to create encapsulates visual behavior. It is used to create UI widgets. |
Directive is used to create behavior to an existing DOM element. |
Component is helpful to break up our Application to smaller component |
Directive is help us to create re-usable components |
Pipes can be define by component |
We cannot create pipes using directive |
We can present only one component per DOM element |
We can define many directive per DOM element |
@component keyword is used to define metadata |
@directive keyword is used to define metadata |
Summary
Angular Component is class with the template, which deals with View of the Application and also contains the business logic. It is very useful to divide our Application to smaller parts.