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
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.
Next step is to create a new instance of this EventEmitter.
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.
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
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
In the last step we can use this object in the method basket, f.e. assigned it to a variable or doing other stuff.
That's it.
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 { Output, EventEmitter } from '@angular/core';
Next step is to create a new instance of this EventEmitter.
@Output() counter: EventEmitter<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 o: any =
{productid: id, count: 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
Post a Comment