Skip to main content

Nested Component - Passing Data to a Parent Component

In my previous article Nested Component - Passing Data to a Child Component, I explained how to pass data from a parent component to a child component. 
In this article I will describe how you do the other way, passing data from a child to a parent component.

As you know, there is a decorator called @Input for passing data to the child, and of course there is another decorator to passing the data to the parent. This decorator is called @Output. Very obvious.

So we have to import this decorator to your parent component

import { Output } from '@angular/core';

Now we can use this decorator. The property type of the decorator must be an event. The data to pass becomes the event payload.

So we have to import the EventEmitter, too, because in Angular an event is defined with an EventEmitter object.

import { OutputEventEmitter } from '@angular/core';

Next step is to create a new instance of this EventEmitter.

@Output() counterEventEmitter<any> = new EventEmitter<any>()

In my example we want to pass a counter back to the shopping basket. The user can drag and drop an item to a shopping basket and then he/she can tell us how many items he/she wants to order.



We want to pass this counter back to the parent component everytime the user is changing it. We adding a click event to the numeric box and call a onClick() Method.

<kendo-numerictextbox style="border-style: groove" name="count" [(ngModel)]="count" (click)='onClick(id)'></kendo-numerictextbox>

We are giving the id from this product to the method so we know in the parent component to with product this counter belongs. We will create an object that we will pass to the parent. The whole method will look like this

onClick(id){
  
 var oany =
   {productid: idcount: this.count}
 
   this.counter.emit(o)
 
}


Now the Object o  is assigned to the variable counter which has the @Output decorator. The last thing we must do is to passing this Object to the parent component. 
 The container component receives that event with the specified payload. We doing this by using data binding in the html that calls a method using $event

<app-count (counter)='basket($event)'></app-count>

In the last step we can use this object in the method basket, f.e. assigned it to a variable or doing other stuff.

  basket(event) {

  this.count = event
    }

That's it.

Comments

Popular posts from this blog

Social Login with Angular 4 and FireBase

There is a way to let users use there social logins to get access to Firebase. But how do you implement this login to your Angular 4 project. In this article I will tell you how to set up your Firebase database and how do you implement social login to your angular project. Set up Firebase First we have to get our database ready. In your Firebase Console you will find Authentication in the left navigation bar. At the tab Sign-In Method you can enable different sign in methods. In our example we will enable Google and Facebook, as it's the most commend social login methods these days. The Google Login will be configured automatically. When you enable Facebook Login you need an App ID and an App Secret. You will get these when you register yourself as a developer at Facebook. You can read how you can do that at the Facebook Site . I will not explain you that in detail because it's very easy. If we done, it's time to set up our Angular4 code. Install Ang...

Typescript: json2ts is a nice helper

Writing interfaces can be annoying. You can save a lot of time when you have to define Typescript interfaces for data that you are loading from a webservice.  Instead of typing all the interfaces yourself you can just use a nice service in the web: json2ts Just paste in your json code and it generates the corresponding interfaces in Typescripts. Example JSON: [   {      "city": "Berlin",     "country": "Germany",     "currencies": [{"code":"EUR"}]   },   {      "city": "Paris",     "country": "France",     "currencies": [{"code":"EUR"}]   } ] Generated code: declare module namespace {     export interface Currency {         code: string;     }     export interface RootObject {         city: string;         country: string;         currencies: Currency...

Nested Component - Passing Data to a Child Component

If you want to pass data to a nested component you have to use the @Import decorator. You can find this decorator at @angular/core import  {  Input  }  from   '@angular/core' ; Now I show you how you can use this decorator. In my example I want to pass a counter from a Shopping List to a Shopping Basket Component In the end, the shopping basket should look like this: The Shopping Basket shows the number of items in an array (Shopping List). Everytime we put an item in the basket we count the items in the array this . counter  =  this . selectedProducts . length Now we have to pass the counter to the ShoppingBasketComponent by using property binding < app-shopping-basket  [ count ]= "counter" ></ app-shopping-basket > After this we can use the input decorator at the child component export   class   ShoppingBasketComponent   implements   OnInit  { @ Input ()  count ...