Application Events vs Component Events : Which/How to use for handling custom events in Lightning
As we know that along with system events, there are 2 types of custom lightning events:
- Application Events
- Component Events
Here I am going to explain difference between them along with code sample.
Component Events
- Components events can be handled by same component or component which is present in containment hierarchy (component that instantiates or contain component).
- Below is syntax for creating component event.
<aura:event type="COMPONENT" description="Event template" > <aura:attribute name="msg" type="String" access="GLOBAL"/> </aura:event>
- Below is syntax for firing component events from javascript controller.
var accidentEvent = component.getEvent("newCarAccident"); accidentEvent.setParams({"msg":"New Message!!!."}); accidentEvent.fire();
- While handling component events, we need to specify name attribute in <aura:handler>
<aura:handler action="{!c.handleNotification}" event="c:carAccidentComponentEvent" name="newCarAccident">
Make sure that name attribute is same as that of name attribute while registering the event.
Application Events
- This kind of events can be handled by any component which is listening to it (have handler defined for event). It is kind of publish-subscribe modal.
- Below is syntax of creating application event.
<aura:event type="APPLICATION" description="Event template" > <aura:attribute name="msg" type="String" access="GLOBAL"/> </aura:event>
- Below is syntax to file application events from javascript controller.
var appEvent = $A.get("e.c:carAccidentAppEvent"); appEvent.setParams({"msg":"New Message!!!."}); appEvent.fire();
- While handling application events, no need to specify name attribute in <aura:handler>
<aura:handler event="c:carAccidentAppEvent" action="{!c.handleNotification}"/>
System Events
- These events are fired automatically by the framework such as during component initialization, attribute value change, rendering etc. All Components can register for system events in their HTML markup.
- Few examples of system events are init, aura:waiting, aura:doneWaiting, aura:doneRendering etc.
- If app or component is rerendered, then init event is fired. If server side call is made in init then, aura:waiting event is fired. Once the server call is finished then aura:doneWaiting event is fired. After this aura:doneRendering is fired.
Events Best Practices:
- Always try to use component events. Component event usage is more localized as these can be used by same component or component in containment hierarchy.
- If you use application events then it may fire system events.
- Use Application events only if components are present in 2 different app or are not in containment hierarchy.
I have created GitHub project which contains example demo for
Application events and Component Events. You can download complete code
from below URL:
Hope this help!!!
No comments:
Post a Comment