Skip to main content

Communicate with Events inLightning web components (LWC) - Salesforce Developers

There are mainly 3 approaches for communication between the Lightning components using events.
  1. Communication using Method in LWC ( Parent to Child )
  2. Custom Event Communication in Lightning Web Component (Child to Parent )
  3. Publish Subscriber model in Lightning Web Component ( Two components which doesn't have a direct relation )
1. Communication using Method in LWC ( Parent to Child )
we can call the method of Child Component from the Parent Component with the help of JavaScript Methods.
LWC have used @api decorator to make the children properties public available so parent can be able to call it directly using JavaScript API.
For example create one public variable and method (which we need to access in parent component) in ChildComponent with @api decorator like below:

ChildComponent:

import { LightningElementapi } from 'lwc';

export default class HelloWorld extends LightningElement {
    @api name;
    @api message;

    @api upperCaseMessage(strString) {
     this.Message = strString.toUpperCase();
}
}

<template>
    Message Will Come here from Parent Component :- {Message}
</template>

ParentComponent:

<template>
  <lightning-layout-item flexibility="auto" padding="around-small"  >
    <lightning-input label="Enter the Message" onchange={handleChangeEvent}>
</lightning-input>
</lightning-layout-item>
<lightning-card title="childData">
   <c-lwc-hello-world></c-lwc-hello-world><!--childComponent Name-->
</lightning-card>
</template>

import { LightningElement } from 'lwc';


export default class MyComponent extends LightningElement {
handleChangeEvent(event){
  this.template.querySelector('c-lwc-hello-world').changeMessage(event.target.value);
 }
}

2. Custom Event Communication in Lightning Web Component (Child to Parent )
Custom Event is used to make the communication from Child Component to Parent Component.
In LWC we can create and dispatch the custom event.

Create and Dispatch an Event
Create Event : We can use the customEvent() constructor to create an event. In constructor we need to pass custom event name and detail of the event.
new customEvent(eventName, detail);

Dispatch Event : We have to dispatch an event at with EventTarget.dispatchEvent() method.
  this.dispatchEvent(new customEvent(eventName, detail);

Handle an Event : There are two ways to listen to an event 
  • Declarative via html markup : We need to add “on” prefix in the event name in Parent Component during calling of Child Component for Declaratively event listener.
ParentComponent:
    <template>
          <c-child-component oneventName={listenerHandler}></c-child-component >
    </template>
  • JavaScript using addEventListener method : We can explicitly attach a listener by using the addEventListner method in the parent component.
ChildComponent:
this.template.addEventListener('eventName', this.handleNotification.bind(this));

For More Details And Examples on this please visit : EventDispatch/Listner 

3. Publish Subscriber model in Lightning Web Component ( Two components which doesn't have a direct relation )

Llibrary called pubsub to achieve the communication between two components which doesn't have a direct relation to each other. An event is subscribed by a component and handled when another component which publishes the event within the same scope.

Please use this link to get the pub sub utility code. Pubsub module support below three method
  1. Register 
  2. UnRegister
  3. Fire
Example :

import { LightningElementapiwire } from 'lwc';
import { CurrentPageReference } from 'lightning/navigation';
import {
    registerListener,
    unregisterListener,
    unregisterAllListeners,
    fireEvent
from 'c/pubsub';

export default class AuraPubsub extends LightningElement {
    @wire(CurrentPageReferencepageRef;

    connectedCallback() {
        this.dispatchEvent(new CustomEvent('ready'));
    }

    @api
    registerListener(eventNamecallback) {
        registerListener(eventNamecallbackthis);
    }

    @api
    unregisterListener(eventNamecallback) {
        unregisterListener(eventNamecallbackthis);
    }

    @api
    unregisterAllListeners() {
        unregisterAllListeners(this);
    }

    @api
    fireEvent(eventNamedata) {
        fireEvent(this.pageRefeventNamedata);
    }
}

Fire the event from other Component. In that js file, We need to trigger the event with name and value. Remember, we also need to send the page reference attribute as current page reference for successful communication

import {  fireEvent } from 'c/pubsub';
import { CurrentPageReference } from 'lightning/navigation';
export default class OtherComponent extends LightningElement {
     @track myMessage;
     @wire(CurrentPageReferencepageRef;

     sendMessage() {
          fireEvent(this.pageRef'messageFromSpace'this.myMessage);
     }
}

Comments

Popular posts from this blog

Maintain Your Administrator Certification for Spring ’24

Maintain Your Administrator Certification for Spring ’24 Intelligence Views Intelligence views are now available for leads, contacts, and accounts in Sales Cloud. Turn on a view in Setup and then add the Intelligence View button to the view-button layout for the applicable page. New Salesforce organizations include the views by default, but admins for existing orgs can enable: Lead Intelligence View Contact Intelligence View Account Intelligence View Find specifics about these views in the next three topics. Turn on Contact Intelligence View in Contact Intelligence View Setup and add the Intelligence View button to the Contact List View button layout. To view engagement metrics, enable Email Tracking in the Inbox section of Sales Engagement Setup. To see the Intelligence View, users go to the Contact home page and click Intelligence View. To view engagement metrics, choose Engagement Metrics from the Metrics menu. To see the Account Intelligence view, go to the account home page and cl...

Maintain Your Platform Developer I Certification for Winter ’25

  Make Invocable Actions Easier to Configure with New InvocableVariable Modifiers Simplify the configuration of invocable actions using new modifiers from Salesforce. Both the defaultValue and placeholderText modifiers will appear in Flow Builder for the Action elements that correspond to an invocable method. Here’s how to use them. defaultValue Modifier : Set a default value for an input parameter. When the action is used, the input parameter will have a predefined value unless changed by the user. placeholderText Modifier : Set custom placeholder text for an input parameter. Text can provide examples or additional guidance to help users understand what to enter in the input field. Accessing these modifiers in Flow Builder makes it easier to configure and use the actions within your flows. This change applies to Lightning Experience and Salesforce Classic in Performance, Unlimited, Developer, Enterprise, and Database.com editions.

Maintain Your Administrator Certification for Spring ’25

  Manage Included Permission Sets in Permission Set Groups via Summaries Update user access more efficiently by specifying which permission set groups include a permission set directly from the permission set’s summary. Previously, to manage included permission sets, you were required to navigate to each permission set group’s page. From Setup, in the Quick Find box, enter  Permission Sets , and select Permission Sets. Select a permission set, and then click  View Summary . In the Related Permission Set Groups tab, click  Add  or  Remove . This change applies to Lightning Experience and Salesforce Classic (not available in all orgs) in Contact Manager, Group, Essentials, Professional, Enterprise, Performance, Unlimited, Developer, and Database.com editions. Sort List Views by Multiple Columns To see your data in a more intuitive way and make your list views more actionable, you can now sort list views on object home pages by up to five columns. Select the c...

Translate