Thank you for ng-India 2020, find Photos and Resources here.

Hey there!

I’m Dhananjay Kumar, organizer of India’s Largest Angular Conference, ng-India.

I thank you for participating in ng-India on 29 Feb 2020 in Delhi. It is you, who has made ng-India, India’s (or perhaps Asia’s) Largest Angular Conference.

I hope you had a good time learning from esteem speakers from across the world, you liked the food, and you wear ng-India t-shirt with pride.

You can find all photos of ng-India 2020 at below link, let me know your favorite photo.

https://photos.app.goo.gl/chfcy72WwacAWcfy7

Feel free to share your photo wearing the ng-India T-shirt on twitter or LinkedIn with hashtag #Angular, #ngIndia, and #ngIndia2021.  Your happy photo may win your discounted ticket for ng-India 2021.

Recorded Talks

We should able to upload all recorded videos of the talks by the end of March. Once uploaded, I will send you notification mail, or you may want to subscribe to <geek97/> YouTube channel for updates on videos as it gets uploaded.

Subscribe here:

https://www.youtube.com/c/geek97

Resources

You can find slides and other resources for various talks here.

Rob Wormald’s Keynote Presentation

Manu Murthy’s Presentation on Angular Team

Jesse Sander’s Presentation on NgRx

Martina Kraus’s Presentation on Angular Ivy

Sam Julien’s Presentation on Demystifying Token Authentication in NgRx

Sam Julien’s Code Sample on Demystifying Token Authentication in NgRx

Siddharth Ajmera’s Presentation on Bazel

Santosh Yadav’s Presentation on  Angular Builder

Santosh’s Yadav Code Sample on Angular Builder

Srashti Jain’s Code Sample on Angular Service Worker

Srashti Jain’s Presentation on Angular Service Worker

Nishu Goel’s Presentation on Framework-agnostic Web Components

Nishu Goel’s Code Lab on Framework-agnostic Web Components

Jinal Shah’s Code Sample on YouTube Player Angular Component

Jinal Shah’s Running Demo on Angular Components

Pankaj Parkar’s Code Sample on Higher-Order Components

Pankaj Parkar’s Presentation on Higher-Order Components

Darpan Kumar’s Angular Global Error Handling Code Sample

Thank you

I take this opportunity to thank all the amazing speakers.

Each one of them inspires us to become better Angular developers. I hope they will consider to speak and teach us again in ng-India 2021.

You may consider following them on twitter for constant learning from their blogs, talks, books, videos. You can find their twitter details below,

Rob Wormald –  @robwormald

Manu Murthy –  @manu_murthy

Jesse Sanders –  @JesseS_BrieBug

Michael Hladky – @Michael_Hladky

Sam Julien –  @samjulien

Martina Kraus –  @MartinaKraus11

Nishu Goel –  @dcoustawilson

Srashti Jain – @srashtisj

Siddharth Ajmera –  @SiddAjmera

Dewansh Parashar –  @dewanshparashar

Pankaj Parkar –  @pankajparkar

Jinal Shah – @jinalshah999

Darpan Kumar –  @darpank21859647

Santosh Yadav –  @SantoshYadavDev

I also thank sponsors, volunteers for all their help, and special thanks to Stephen Fluin from Angular Team and Shivprasad Koirala from QuestPond for all their support since the inception of ng-India.

Improvements

Let me know how to improve and makes ng-India more inclusive.

For any feedback and suggestion, write to me at Debugmode@outlook.com

What Next

If you are motivated and enough inspired to be next GDE, blogger, published author, or speaker and think I can be a help, feel free to reach out to me. I would love to help you in all possible ways. Good Luck.

I hope to see you in ng-India 2021.

Once again, thank you for coming.

Cheers,

Dhananjay Kumar

Teacher, MVP, GDE

Video – Step by Step using TypeScript in a Node.js Application

This video explains steps to use TypeScript in a Node.js application.

You can read step by step article on the same here –  here

Download source code from here

 

To start with create a folder and run npm init command inside the folder. After that install these dependencies,

  •  npm install -D typescript
  • npm install -D tslint
  • npm install express -S
  • npm install @types/express -D

To follow steps read article here

Video- Why You need the apply() and the call() methods in JavaScript

To pass value of ‘this’ object in a function apply and the call methods are used.

 

The apply() and the call() methods are used to call a function indirectly. When you call a function using the apply() and the call() methods, that is called Indirect Invocation Pattern .

The first parameter is always the value for ‘this’ object.

In the apply() method parameters are passed as an array In the call() method parameters are passed as comma-separated

Video – Various ways of creating a function in JavaScript

This video teaches you the various ways of creating a function in JavaScript. There are four ways a function can be created in JavaScript. They are as follows:

1. A function as a Statement
2. A function as an Expression
3. A function as an Arrow function
4. A function using Function constructor

 

 

A function statement is hoisted at the top of the execution context. So, it can be invoked before it is created. In a function statement, primitive parameters are Passed as a Value and non-primitive parameters such that and object and an array are Passed as a Reference.

A function expression can be created without a name, whereas a function statement must have a name. A function expression is not hoisted on the top of the execution context, whereas a function statement is hoisted at the top of the execution context.

 

An arrow function does not have its own value of ‘this’ object

Five Things about JavaScript delete operator

A better understanding of delete operator is necessary for JavaScript developers. As the name suggests, the delete operator deletes properties from the object.  You can delete a property as shown below:

d1.png

It returns true on successful deletion. However, in some cases, it may return true even if it does not delete a property. In this blog post, we will learn five such features of the JavaScript delete operator.

#1: Does not delete variable created using var

The delete operator does not delete variable created using var from global scope or function scope.  In addition, it does not delete any function created in the global scope.



var foo = 9;
koo = 9;
console.log(foo); // 9
console.log(koo); // 9
delete foo; // false
delete koo; // true
console.log(foo); // 9
console.log(koo); // Error: koo is not defined


In the above code, we have created two variables foo and koo. Variable foo is created using var, and variable koo is created without using var. Therefore, the delete operator will able to delete koo and returns true, but won’t able to delete variable foo and returns false.  As koo is deleted successfully, when you try to print its value, JavaScript throws an error that koo is not defined.

The delete operator does not delete any function from the global scope.



function foo(){

}

var koo = function(){

}
console.log(delete foo); // false 
console.log(delete koo); // false 


Whether function statement or function expression, the delete operator does not delete them and returns false as shown in the above code listing.

#2: Does not delete variable created using let or const

The delete operator does not delete variables created using let or const from their execution context.  Consider a function, as shown below:



function Student(){

    let name = 'foo';
    const height = 165;
    console.log(name); // foo
    console.log(height); // 165
    delete name; // false 
    delete height; // false 
    console.log(name); // foo
    console.log(height); // 165
}
Student();


In the Student function, we have created two variables name and height using let and const respectively. Now when you delete the name variable, the delete operator does not delete it and returns false. In the same way, when you delete the height variable, the delete operator does not delete it and returns false.

So, the delete operator does not delete variables created using let, or const from the function scope.

#3 Only deletes the object’s own property

The delete operator only deletes an object’s own property. In addition, it does not delete the property, if its configurable is set to false.

Consider an object, as shown below:



var Dog = {
    name:'foo',
    age : 7 
}


JavaScript object’s own property means property, which is part of the object itself and not from the prototype chain.  The delete operator can delete its own properties and on successful deletion returns true.  Consider below code listing:



console.log(Dog.age); // 7 
delete Dog.age; // true 
console.log(Dog.age); // undefined 


The delete operator deletes age property successfully and returns true. Therefore, after deleting when you read Dog.age value, JavaScript returns undefined.

For any property, if configurable is set to false, the delete operator will not be able to delete that.  Consider below code listing:



var Dog = {
    name:'foo',
    age : 7 
}

Object.defineProperty(Dog,'age',{configurable:false});
delete Dog.age; // false 
console.log(Dog.age); // 7 


As we have set configurable to false for age property, the delete operator will not be able to delete it and returns false.

#4 Does not delete property from the prototype chain

The delete operator does not delete property from the prototype chain.  Consider the code listing below, in which we are creating a prototype chain.



var Animal = {

    name : 'foo',
    age : 7 
}

var Dog = {

    name:'foo Dog',
    isCute : true 
}

// Creating prototype chain 
Dog.__proto__ = Animal; 


We have two objects Animal and Dog. Both have a name property. We are creating a prototype chain between these two objects using __proto__. Keep in mind that there are other ways also to create a prototype chain between the JavaScript object. However, the behavior of the delete operator would be the same. Consider below code listing:



console.log(Dog.name); // foo dog
delete Dog.name// true 
console.log(Dog.name); // foo
delete Dog.name // won't delete from Animal 
console.log(Animal.name); // foo


 

For first print, JavaScript prints value foo dog, as Dog object has its own name property, and JavaScript prints that value.

In next line, when you delete Dog.name, delete operator successfully deletes it and returns true because as of now Dog object has its own property name.

After deleting Dog.name, when you print its value again, JavaScript will traverse the prototype chain because now no longer Dog has a name property, it will find name property with the Animal object and will print the value.

In next line, when you delete Dog.name, delete operator does not delete because the name is no longer own property of object Dog.  JavaScript delete operator does not delete property from the prototype chain.

Keep in mind that the delete operator does not delete property from the prototype chain.

#5  If the property does not exist, delete does not do anything

If the property which you are trying to delete does not exist, delete will not have any effect, and also it will return true. Consider the code listed below:



var Animal = {

    name :'foo',
    age : 9 
}

console.log(delete Animal.isCute); // true 
console.log(delete loo); // true 


As you see that in Animal object,  there is no isCute property, hence the delete operator will do nothing and returns true. Also, we do not have loo property in the global scope, so the delete operator does nothing and returns true.

Understanding of JavaScript delete operator is essential for any developer. I hope, now you are aware of five important characteristics of the delete operator. Thanks for reading it.

Summary of the Year 2019

Dear Readers and Community Member,

I thank you for all your support, love, and respect in 2019. You have been a constant companion since 2009, and I could not imagine my life without you. Once again, thank you.

For me, the Highlight of 2019 was that in May I successfully summited Mount Everest Base Camp.

IMG_8425.JPG

I candidly admit that in 2019, I was not in the best of mental health. However, like every year, I tried to add values in your life through books, blog posts, and talks.  My 2019 was as follows:

Authored Angular Essentials Book

In January 2019, I got published my 1st book on Angular.  There are more than 1000 copies of this book have been sold, and it is very popular among Angular developers in India.

angularbookphotro

You can get the book from amazon on the below links,

Amazon India: https://www.amazon.in/Angular-Essentials-Dhananjay-Kumar/dp/9388511247

Amazon:  https://www.amazon.com/Angular-Essentials-Dhananjay-Kumar-ebook/dp/B07NL5RSDF/

Thank you for getting the book, and I hope you found it useful.

Organized, India’s Largest Angular Conference, ng-India

ng India (570)

In 2019, I organized the second edition of India’s Largest Angular Conference. The conference was attended by more than 300 developers from all across India and esteem speakers from all across the world. You can watch recorded talks at the conference here:

https://www.youtube.com/watch?v=_Z_XMhNzLCQ&list=PL4ghowaPhrX3PxiScj4vAqKI1kjv_qi1E

The third edition of ng-India is happening on 29th Feb 2020, and you can find more details https://www.ng-ind.com/.  I hope to see you there.

25 Blog Posts

In 2019, I authored 25 blog posts, including videos. They were on topics such as,

blogpost

In 2020, I am committed to be more disciplined and write more on JavaScript, Node.js, graphQL, TypeScript, Angular, etc.

5 Talks

In 2019, I delivered 5 talks at various conferences in India and Nepal.  I delivered 3 talks on Angular and 2 talks on JavaScript.  You can find more about my speaking here

If you want me to come and speak in your meetup, conference, events feel free to reach out to me on the email debugmode[at]outlook[dot]com

Award and Recognition

In 2019, I was awarded Microsoft Most Valuable Professional Award  10th times, and as always, it was a huge matter of pride for me.

mvpaward

Also, in 2019,  I was recognized as a Google Developer Expert in Angular and Web technologies. I felt very happy for this recognition by the Angular community.

gdeaward

You can learn more about my GDE journey here

Started as Independent Trainer and Consultant

Starting 1st August 2019, I started as independent trainer and consultant. If you need my help feel free to reach me on debugmode[at]outlook[dot]com. I can be a help on

  1. JavaScript
  2. Angular
  3. Node
  4. GraphQL
  5. C#
  6. .NET
  7. Azure
  8. Microservices etc.

I am very excited for 2020, and I wish you all luck. See you around 😊

 

Step by Step using TypeScript in a Node.js Application

Download or clone source code from here

In this blog post, you are going to learn to configure the Node.js application to use TypeScript.  At the end of the blog post, you will have a REST API created using TypeScript and Express in Node.js.

Before starting to make sure that you have NodeJS installed on your machine from here. You can check whether Node.js is installed by running the command,

  • node –version

To start with creating a folder and change directory to that folder.  In the directory create package.json file using the command:

  • npm init

Just keep pressing the return key (Enter) for all the questions to create a default package.json file.  After that Install all dependencies for TypeScript and Express

  • npm install -D typescript
  • npm install -D tslint
  • npm install express -S
  • npm install @types/express -D

In the npm command -D flag is for –save-dev and -S flag is for –save. After successfully installing the dependencies, create a tsconfig.json file in the root of the project directory. Inside the tsconfig.json file put the following information,



{
    "compilerOptions": {
      "module": "commonjs",
      "esModuleInterop": true,
      "target": "es6",
      "moduleResolution": "node",
      "sourceMap": true,
      "outDir": "dist"
    },
    "lib": ["es2015"]
  }


We have set various compiler options such that TypeScript code should be transpile to the ES6 standard of JavaScript and it should follow node.js module resolution. You can learn more about various options here

After configuring TypeScript compiler options, add a file with name tslint.json in the root folder and add this code,



{
    "defaultSeverity": "error",
    "extends": [
        "tslint:recommended"
    ],
    "jsRules": {},
    "rules": {
        "no-console":false
    },
    "rulesDirectory": []
}


We have enabled console in the rules for better debugging.   After this, modify the package.json file.  Just modify the main section and start the script as shown below.



{
  "name": "typescriptinnode",
  "version": "1.0.0",
  "description": "",
  "main": "dist/app.js",
  "scripts": {
    "start": "tsc && node dist/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Dhananjay Kumar <debugmode@outlook.com> (https://debugmode.net)",
  "license": "ISC",
  "devDependencies": {
    "@types/express": "^4.17.2",
    "tslint": "^5.20.1",
    "typescript": "^3.7.4"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}


In the package.json file main entry specifies the entry point of the application. TypeScript trasnpiles the *.ts file and put them inside dist folder with extension *.js, as we have specified that in previous steps.  So, the app.ts file would be trasnpiled as an app.js file and would be saved in the dist folder.

The start entry in the script section specifies that the first TypeScript compiler will run and then the node will run the app.js file from the dist folder.  In this configuration, the app.ts file is going to be the main file.  If you want to make index.js as the main entry of application, modify the main and start entry in package.json file accordingly.

As of now, we have configured the Node.js project to work with TypeScript and Express. Next, create an src folder and add two files inside that app and product ts files.

After adding these two files, your project structure should look like below,

a

To test whether you have performed all steps correctly, in the app.ts file put the below code,



class Product {
    public Title ;
}

let  p = new Product();
p.Title = "Pen";
console.log(p);


On then run the command npm start, you should get p object printed.  Alright, next to create REST API using Express, in the product.ts file add below code,



export class Product {

    public Id : string;
    public Title : string;
    public Price : number;
    public inStock : boolean;
  }


After that in the app.ts file, put the below code:



import express from 'express';
import {Product } from './product';

const app = express();
const port = 3000;

function getProduct(){
  let p = new Product();
  p.Id = "1";
  p.Price= 100;
  p.Title="Cricket Bat";
  p.inStock = true;
  return p;   

}
app.get('/products', (req, res) => {
  res.send(getProduct());
});

app.listen(port, err => {
  if (err) {
    return console.error(err);
  }
  return console.log(`server is listening on ${port}`);
});


Let us walk through the code,

  1. Importing Express and product module. Due to TypeScript, we can use ES6 module export import instead of Node.js require
  2. getProducts() function returns list of products
  3. express get() method get executed when client will perform HTTP request operations on /products url.
  4. Listening to the express server at port 3000.

Now run the application again with npm start, you should get console message that server is listening on 3000. Navigate to localhost:3000/products, and you should able to get list of products returned.

Download or clone source code from here

So, you have successfully created a Node.js application using TypeScript. In another blog post, I will discuss in detail about express and TypeScript.  I hope you find this post useful. Thanks for reading.

All about NaN in JavaScript

nan1In JavaScript, NaN is one of the most confusing concepts; hence, it is often asked in the interview. You may have come across questions such as,

  • What is NaN
  • What is the type of NaN
  • How to check for the NaN
  • What is the difference between isNaN() and Number.isNaN()

In this post, let us learn the answer to the above questions one by one or you can watch the video here :

For me, The NaN is an error value in the JavaScript. However, technically it is the property of the global object. You get NaN when the value cannot be computed or as a result of attempted number coercion (type conversion) of non-numeric value (such that undefined) for which primitive numeric value is not available.NaN2

For example, for an arithmetic operation in which one of the operands is a missing value (read it undefined), JavaScript returns NaN. However, there are some other non-computational scenarios, such that divide by zero; instead of NaN you get Infinity value.



const foo = 7 + undefined;
const too  = 7/0;
console.log(foo); // NaN
console.log(too); // Infinity 


NaN3

You get value NaN in the following scenarios,

  • If one of the operands in an arithmetic operation is undefined
  • If one of the operands in an arithmetic operation is NaN
  • Dividing Zero by Zero
  • Dividing Infinity by Infinity
  • Multiplying zero with Infinity


let foo = 7 + undefined; // NaN
let koo = undefined - 7 ; // NaN
let loo = NaN + NaN ; // NaN
let hoo = NaN - NaN; // NaN
let noo = 7 + NaN // NaN
let too = NaN * NaN // NaN
let poo = NaN % NaN // NaN
let roo = NaN % NaN // NaN
let zoo = 0 / 0 // NaN
let qoo = 0 * Infinity; // NaN


NaN stands for Not a Number, and interestingly its type is number



console.log(typeof NaN); // number


NaN4

JavaScript treats NaN like any real number and can be used in any number type operations. The NaN is a property of the global object, and its other equivalent is Number.NaN.

NaN5

Keep in mind that both are the same.


console.log(NaN); // NaN
console.log(Number.NaN); // NaN 


The property attributes of NaN property are set to false. That means you cannot write, enumerate, or configure NaN property.



const NaNProp = Object.getOwnPropertyDescriptor(Number,'NaN');

/*Output
{ value: NaN,
    writable: false,
    enumerable: false,
    configurable: false } */

console.log(NaNProp); 


Also, to use NaN property, you do not have to create the Number object, as it is a static property.

Check for NaN

In JavaScript, NaN is a value that is not strictly equal to itself, which makes it tricky to check for the NaN.

NaN8

It is not possible to rely on the equality operators (== and ===) to determine whether a value is NaN or not, because both NaN == NaN and NaN === NaN evaluate to false.



const foo = NaN;
console.log(NaN === foo) // false
console.log(NaN === NaN) // false
console.log(NaN == foo) // false
console.log(NaN == NaN) // false 


As you cannot use equality operator to check for the NaN value, JavaScript provides other ways to check value for NaN,

  1. isNaN() function
  2. isNaN()
  3. is(foo,NaN)

The Number.isNaN() method determines whether the value of the passed parameter is NaN and also its type is number.



const foo = NaN;
console.log(Number.isNaN(foo)) // true
const too = 'NaN';
console.log(Number.isNaN(too)) // false 


The Number.isNaN() method checks for both

  1. Whether the value is NaN
  2. Whether the type is number

As it checks for both types and the value, it always returns the expected result.


const foo = NaN;
console.log(Object.is(foo,NaN)); // true
console.log(Object.is('NaN','NaN')); // true
console.log(Object.is('NaN',foo)); // false


 

You can also use the Object.is() method to check for the value of NaN.



const foo = NaN;
console.log(Object.is(foo,NaN)); // true
console.log(Object.is('NaN','NaN')); // true
console.log(Object.is('NaN',foo)); // false


The Object.is() method determines whether two values are the same value or not. It checks for both equality and strict equality.  So you can also use the Object.is() method for the value of NaN.

How about isNaN()

The isNaN()  function also determines whether a value is NaN or not. Before checking for the value NaN, it tries to covert value to be tested as a number resulting in many unexpected results.



const foo = NaN;
console.log(isNaN(NaN)); // true
console.log(isNaN(foo)); // true
console.log(isNaN(undefined)); // true
console.log(isNaN(null)); // false
console.log(isNaN(0/0)); // true
console.log(isNaN({})); // true
console.log(isNaN(false)); // false
console.log(isNaN(1234)); // false


In the above example, for many cases such that isNaN({}),  JavaScript is not able to do coercion of the passed value as a number, hence returns true.

Let us consider when you pass undefined in to check for the value of NaN in isNaN() function and JavaScript is not able to convert undefined to a valid real number; hence, it converts it to NaN, and as a result, you get true.

Starting ECMA 2O15, it is advisable to use Number.isNaN() method to check for the value of NaN.

NaN9

As a summary, JavaScript returns NaN for the value which can not be computed, and you should use Number.isNaN() to check whether a value is NaN or not.

I hope now you can answer about JavaScript NaN confidently in the interview.  Thanks for reading and any training or consulting need reach out to me at debugmode[at]outlook[dot]com 

Recognized as a Google Developer Expert by Google

I am officially a Google Developer Expert in Angular and Web Technologies. I take this opportunity to thank the Angular global community and all my students who come to my training, meetups, and workshops. This recognition was never possible without you.

a

I am humbled to be one of the few professionals who are awarded as both Microsoft MOST Valuable Professional and Google Developer Expert.

Though I have been awarded the Microsoft MVP Award 10 times since 2010, this is my 1st GDE recognition.

About GDE

As of the official website, GDE is a program to recognize individuals who are experts and help others. You can learn more about the program here

abc

There are around 110 Google Developer Experts in Angular all across the world, and I am humbled to be part of the esteemed group.  I understand this is a responsibility and would carry that with pride.

My Community Contributions

I have started working on Angular and JavaScript and for the Angular/ JavaScript community since August 2016, and since then

  • Organizing India’s Largest Angular Conference, ng-India. It’s third edition is happening on 29th Feb 2020 in Delhi. Find more details here
  • Have hosted 12 free full day Angular workshops in various Indian cities.
  • I have delivered 8 talks on Angular in various conferences. Find details here
  • I have written more than 50 blog posts on Angular. You can read them here
  • Authored best selling Angular book called Angular Essentials
  • Helped start-ups to embrace Angular as technology

Besides the above Angular contributions, I have also been making contributions to other technologies such as JavaScript, .NET, Azure, etc.

One of the most important aspects of the GDE program is mentoring others, and I have been mentoring many folks to be author, speaker, learn Angular to get a better job, etc, and I am very proud of that.  Below, sharing some photos from events I hosted in the past,

a1.jpg

a2

a3

a4

a5.jpg

The process to become GDE

There are four steps in the GDE process:

  1. The first step is the Nomination. The Country community lead, a member of the Google Product Team, or an existing GDE can nominate you for the GDE.
  2. The second step is the Community Interview. If your nomination is accepted, the next round is Community Interview, which is taken by an existing GDE in your expertise area.
  3. The third step is the Product Interview. Once you pass Community Interview, the third step is Product Interview, which is taken by a member of the product team.
  4. The fourth step is signing the NDA and getting accepted into the program.

Thank You

I was (perhaps am) always a Microsoft technologies boy. When I was just 25 years old, I received my 1st MVP award. Hence I have grown up with Microsoft technologies and is a Microsoft Most Valuable Professional who was always involved with MS stack. However, when I entered to open source community and started advocating JavaScript and Angular some individuals were very welcoming and supported me since beginning.  This post would be incomplete without thanking them.

Thank you, these amazing people, from the Angular community,

Todd Motto, Geard Sans, Deborah Kurata, Joe Eames, Jesse Sanders, Brian Holt, John Papa, and Ben Lesh

I also would like to thank my constant support for a decade now (in all my winters and summer)

Julie Lerman, Glenn Block, Dan Wahlin, Steve Smith, Stephen Forte, Rey Bango, and Jeff Fritz

From the Angular Team,

Stephen Fluin, Vikram, Jules Kremer, and   Brad Green

And last but not least thank you  to Shiv Prasad Koirala  ,  Gaurav Mantri, Abhishek Kant, and my elder brother Mritunjay Kumar

Once again, a big thank you to everyone who comes to my meetups, workshops, and ng-India. This was never possible without your love and respect.

What Next?

I will continue teaching and helping you understand when to use the async pipe and JavaScript prototype diagram. For any training or speaking reach out to me at debugmode@outlook.com

See you in India’s Largest Angular Conference , ng-India  on 29 February 2020.

Thanks