You can dynamically add a handler for an event that a component fires.
The addEventHandler() method in the Component object replaces the deprecated addHandler() method.
To add an event handler to a component dynamically, use the addEventHandler() method.
1addEventHandler(String event, Function handler, String phase, String includeFacets)
event
The first argument is the name of the event that triggers the handler. You can’t force a component to start firing events that it doesn’t fire, so make sure that this argument corresponds to an event that the component fires. The <aura:registerEvent> tag in a component’s markup advertises an event that the component fires.
For a component event, set this argument to match the name attribute of the <aura:registerEvent> tag.
For an application event, set this argument to match the event descriptor in the format namespace:eventName.
handler
The second argument is the action that handles the event. The format is similar to the value you would put in the action attribute in the <aura:handler> tag if the handler was statically defined in the markup. There are two options for this argument.
To use a controller action, use the format: cmp.getReference("c.actionName").
To use an anonymous function, use the format:
1function(auraEvent) {2 // handling logic here3}
For a description of the other arguments, see the JavaScript API in the Aura Reference app.
You can also add an event handler to a component that is created dynamically in the callback function of $A.createComponent(). For more information, see Dynamically Creating Components.
Example
This component has buttons to fire and handle a component event and an application event.
1/* dynamicHandlerController.js */2({3 fireEvent : function(cmp, event){4 // Get the component event by using the5 // name value from <aura:registerEvent> tag6 var compEvent = cmp.getEvent("compEvent");7 compEvent.fire();8 console.log("Fired a component event");9},1011 addEventHandler : function(cmp, event){12 // First param matches name attribute in <aura:registerEvent> tag13 cmp.addEventHandler("compEvent", cmp.getReference("c.handleEvent"));14 console.log("Added handler for component event");15},1617 handleEvent : function(cmp, event){18 alert("Handled the component event");19},2021 fireAppEvent : function(cmp, event){22 var appEvent = $A.get("e.c:appEvent");23 appEvent.fire();24 console.log("Fired an application event");25},2627 addAppEventHandler : function(cmp, event){28 // Can use cmp.getReference() or anonymous function for handler29 // First param is event descriptor, "c:appEvent", for application events30 cmp.addEventHandler("c:appEvent", cmp.getReference("c.handleAppEvent"));31 // Can alternatively use anonymous function for handler32 //cmp.addEventHandler("c:appEvent", function(auraEvent) {33 // console.log("Handled the application event in anonymous function");34 //});35 console.log("Added handler for application event");36},3738 handleAppEvent : function(cmp, event){39 alert("Handled the application event");40}41})
Notice the first parameter of the addEventHandler() calls. The syntax for a component event is:
For either a component or application event, you can use an anonymous function as a handler instead of using cmp.getReference() for a controller action.
For example, the application event handler could be:
1cmp.addEventHandler("c:appEvent", function(auraEvent){2 // add handler logic here3 console.log("Handled the application event in anonymous function");4});