Introduction
In this article, we are going to learn how to share data from child to parent component in Angular 8 using @ViewChild.
What is a @ViewChild?
A ViewChild is a component if we want to access a child component, directive, or DOM element inside the parent component, we use the decorator @ViewChild() in Angular.
Prerequisites
- Basic knowledge of Angular
- Visual Studio Code must be installed
- Angular CLI must be installed
- Node JS must be installed
Step 1. Let's create a new Angular project using the following NPM command.
ng new sharingData
Step 2. Now, let's create a parent component using the following command.
ng new sharingData
Step 3. Now open the parent.component.html file and add the following code to the file.
<p class="card">
<p class="card-body pb-0">
<h4 style="text-align: center;">Example of Angular Nested Grid</h4>
<p class="row">
<p class="col-12 col-md-12">
<p class="card">
<p class="card-body position-relative">
<p class="table-responsive cnstr-record product-tbl">
<table class="table table-bordered heading-hvr">
<thead>
<tr>
<th width="50">Art.No</th>
<th>Brand</th>
<th>Price/Unit</th>
<th>Provider</th>
<th>P. Art. N</th>
<th>S. A/C</th>
<th>Buy A/C</th>
</tr>
</thead>
<tbody *ngFor="let product of productInParent; let i = index">
<tr>
<td align="center">{{product.ArtNo}}</td>
<td>{{product.Brand}}</td>
<td>{{product.Price }}</td>
<td>{{product.Provider}}</td>
<td>{{product.ProviderArtNo}}</td>
<td>{{product.SalesAccount}}</td>
<td>{{product.BuyAccount}}</td>
</tr>
</tbody>
</table>
</p>
</p>
</p>
</p>
</p>
</p>
</p>
<app-child></app-child>
Step 4. Next, open the parent.component.ts file and add the following code in this file.
import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { ChildComponent } from "../child/child.component";
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css']
})
export class ParentComponent implements AfterViewInit {
@ViewChild(ChildComponent) child;
constructor() { }
productInParent=[];
ngAfterViewInit() {
this.productInParent = this.child.productInChild;
}
}
Step 5. Let's create one more component called child using the following command.
ng g c child
Step 6. Add the following code inside of the child.component.ts file.
import { Component } from '@angular/core';
@Component({
selector: 'app-child',
template: `
`,
styleUrls: ['./child.component.css']
})
export class ChildComponent {
productInChild = [];
constructor() {
this.getProducts();
}
public getProducts() {
this.productInChild = [
{
ProductId: 1,
ArtNo: "100",
Provider: "OppoProvider",
ProviderArtNo: "1Yu",
Brand: "Oppo",
Price: 7810.23,
BuyAccount: "123",
SalesAccount: "321"
},
{
ProductId: 1,
ArtNo: "101",
Provider: "OppoProvider",
ProviderArtNo: "1Yu",
Brand: "Oppo",
Price: 2310.23,
BuyAccount: "123",
SalesAccount: "321"
},
{
ProductId: 1,
ArtNo: "102",
Provider: "OppoProvider",
ProviderArtNo: "1Yu",
Brand: "Oppo",
Price: 7810.23,
BuyAccount: "123",
SalesAccount: "321"
},
{
ProductId: 1,
ArtNo: "103",
Provider: "OppoProvider",
ProviderArtNo: "1Yu",
Brand: "Oppo",
Price: 5810.23,
BuyAccount: "123",
SalesAccount: "321"
}
];
}
}
this. child.productInChild This line of code accesses data from the child component and sends it to the parent component variable.
Conclusion
I hope you have enjoyed this article as much as I have enjoyed writing and coding the examples.
Please let me know how to improve it.