In all the calculations done manually or programmatically, the data collected gets shared and evaluated in a particular process to attain certain end results. Across sectors sharing of data plays a vital role in computing end solutions. Now, let's get into a comprehensive view of how the data get shared among multiple components in an Angular application. Even before getting started with the Angular Project, is important to a clear understanding of the key concept of Data Sharing. In case of having multiple components in your angular application and to communicate between the components, then Angular provides you some features and angular components interaction methods. Hence, in this section lets get a study on the different methods used for sharing data between the angular components.
Angular Components Interaction Methods
Data sharing between the angular components is possible with the following ways,
- Sharing Data from Parent to Child: @Input
- Sharing Data from Child to Parent: @ViewChild
- Sharing Data from Child to Parent: @Output & EventEmitter
- Sharing Data Between Various Components: Service
Sharing Data from Parent to Child: @Input
Firstly, Angular provides a decorator called @Input decorator which can be used to pass data from Parent to Child. This is one of the most common methods of sharing data from Parent to Child in Angular application. Now, let's see the working of the @Input decorator in the following snippets,
Sharing Data from Child to Parent: @ViewChild
Angular provides this @ViewChild() decorator which can be used to inject one component to another. Now, this is made possible by giving the parent access to its attributes and functions. Also, to be noted that the Child component gets available only after the view gets initialized. So, we need to implement the AfterViewInit lifecycle hook to get the data from the child. Now, let's see the working of the @ViewChild decorator in the following snippets,
Sharing Data from Child to Parent: @Output & EventEmitter
The @Output decorator allows marking a class field as an output property and supplies configuration metadata.
In this method, the child component will emit the data, which will be received by the parent component. Firstly, if we need to send data from the child to the parent, then it is required to emit the data from the child. To make it function so, we need to create a function in the parent to receive the message and set it equal to the variable of the message. The @Output decorator now allows declaring a message event variable in the child. So, now the parent can subscribe to this message event that the child component emits and then executes the receive message function whenever this event occurs.
This ideal condition and this approach are helpful when you want to share some data on some events like button clicks, users and other form-related events.
Sharing Data Between Various Components:
Service is a class that holds the data or functions based on the application's need and also stores the logic in the file, this allows us to reuse the code with the different components when it requires. In the service, we create a private BehaviorSubject that holds the current value of the message. Then, we have to define a current message variable to handle this data stream as an observable that will be used by the components. Lastly, we have to create a function that calls next on the BehaviorSubject to change its value.
Components of the parent, child, and sibling will receive the same values. We inject the CalibraintDataService into the constructor, then subscribe to the observable current message and set its value equal to the variable message.
Now if we create a function in any of these components which changes the message value. When the new data is executed this function will automatically transmit it to all other components.
In this post, it is depicted on how to share data between parent and child components using @Input(), @Output and EventEmitter and also on the methods to share data between different components. Data sharing is a very important concept, and everybody requires sharing data between the application components. Hope you had an insightful overview of the data sharing concept in Angular.