Toggle Side Panel

  • Blogs
  • Consultants
    • Salesforce Product Expertise
      • Top Salesforce ConsultantsTop Salesforce Consultants
      • Marketing Cloud ConsultantsMarketing Cloud Consultants
      • Service Cloud ConsultantsService Cloud Consultants
      • Experience Cloud ConsultantsExperience Cloud Consultants
      • Analytics Cloud ConsultantsAnalytics Cloud Consultants
    • Salesforce Industry Expertise
      • Non-Profit Cloud ConsultantsNon-Profit Cloud Consultants
      • Financial Service Cloud ConsultantsFinancial Service Cloud Consultants
      • Health Cloud ConsultantsHealth Cloud Consultants
      • Commerce Cloud ConsultantsCommerce Cloud Consultants
      • Manufacturing Cloud ConsultantsManufacturing Cloud Consultants
    • Salesforce Experts by Location
      • USATop Salesforce Consultants in USA
      • IndiaTop Salesforce Consultants in India
      • AustraliaTop Salesforce Consultants in Australia
      • United KingdomTop Salesforce Consultants in UK
      • CanadaTop Salesforce Consultants in Canada
  • Webinars
  • Contact Us
  • Discussions
More options
    Sign in Sign up
    • Blogs
    • Consultants
      • Salesforce Product Expertise
        • Top Salesforce ConsultantsTop Salesforce Consultants
        • Marketing Cloud ConsultantsMarketing Cloud Consultants
        • Service Cloud ConsultantsService Cloud Consultants
        • Experience Cloud ConsultantsExperience Cloud Consultants
        • Analytics Cloud ConsultantsAnalytics Cloud Consultants
      • Salesforce Industry Expertise
        • Non-Profit Cloud ConsultantsNon-Profit Cloud Consultants
        • Financial Service Cloud ConsultantsFinancial Service Cloud Consultants
        • Health Cloud ConsultantsHealth Cloud Consultants
        • Commerce Cloud ConsultantsCommerce Cloud Consultants
        • Manufacturing Cloud ConsultantsManufacturing Cloud Consultants
      • Salesforce Experts by Location
        • USATop Salesforce Consultants in USA
        • IndiaTop Salesforce Consultants in India
        • AustraliaTop Salesforce Consultants in Australia
        • United KingdomTop Salesforce Consultants in UK
        • CanadaTop Salesforce Consultants in Canada
    • Webinars
    • Contact Us
    • Discussions
    Close search

    Activity › Forums › Salesforce® Discussions › Sharing Javascript between salesforce lightning components

    Tagged: Javascript in Salesforce, JS Controller, Manual Sharing, Salesforce Apex, Salesforce Lightning, Salesforce Lightning Components, Sharing Rule

    • Salesforce® Discussions

      Sharing Javascript between salesforce lightning components

      Posted by Kumar on December 22, 2016 at 1:54 PM

      Hi all,
      In a Lightning Component we have the notion of a JavaScript controller and a helper. We can use the helper to call code from the JavaScript controller that is shared between functions, so we can reduce redundancy in the code. This all works great.

      However, I was wondering if it is possible, and if so how, to share code between multiple Lightning Components. It doesn't behave like Apex where you can just reference other class.

      Is there any hack for this?

      Thanks

      Jade replied 7 years, 10 months ago 4 Members · 3 Replies
      • Javascript in Salesforce
      • JS Controller
      • Manual Sharing
      • Salesforce Apex
      • Salesforce Lightning
      • Salesforce Lightning Components
      • Sharing Rule
    • 3 Replies
    • Vikas Kumar

      Member
      January 20, 2017 at 2:22 PM

      Hi Kumar,

      Currently the recommended mechanism for this is to use a Static Resource and include it in any components that need to share the same JavaScript via ltng:require (loads the library once and only once similar to requirejs).

    • [adinserter block='9']
    • CloudGenie

      Member
      February 7, 2017 at 9:26 AM

      Hi Vikas, can we use another parameter in " ltng:require "

    • Jade

      Member
      November 23, 2018 at 9:32 AM

      Hi Kumar,

      Lightning Component Framework is built on OOPS concept, not exactly but somehow. So to answer to your question, you can reuse the functions of one component's HELPER in another Component.

      Lightning Component inheritance is similar to object-oriented inheritance in programming languages like Apex or Java.  When a sub component extends a super component it inherits the super component’s attributes, event handlers, and helper methods.  The controller methods of the super component can be called by the sub component but the documentation warns not to do that and suggests that it may become deprecated.  The recommended approach is to use the helper for any super component code a sub component needs to use.  Additionally, abstract components and interfaces can be created.

      When you want to create a component that can be extended you must set a value of true for the extensible attribute of the aura:component. By default, components are not extensible, just like Apex classes are not. You must put {!v.body} inside your base component’s code. This will allow your base component to handle the events generated by Sub Components.

      Super Component: Base.cmp

      <aura:component extensible="true">

      {!v.body}

      </aura:component>

      Super Component Helper: BaseHelper.js

      ({
      callServer : function(component, method, callback, params, setStorable) {
      var action = component.get(method);

      //Set params if any
      if (params) {
      action.setParams(params);
      }

      if(setStorable){
      actions.setStorable();
      }

      action.setCallback(this,function(response) {
      var state = response.getState();
      if (state === "SUCCESS") {
      // pass returned value to callback function
      callback.call(this,response.getReturnValue());
      } else if (state === "ERROR") {
      // generic error handler
      var errors = response.getError();
      if (errors) {
      console.log("Errors", errors);
      this.showToast({
      "title": "ERROR IN SERVER CALL",
      "type": "error",
      "message": errors
      });
      if (errors[0] && errors[0].message) {
      throw new Error("Error" + errors[0].message);
      }
      } else {
      throw new Error("Unknown Error");
      }
      }
      });

      $A.enqueueAction(action);
      },

      /*
      * This function displays toast based on the parameter values passed to it
      * */
      showToast : function(params) {
      var toastEvent = $A.get("e.force:showToast");
      if(toastEvent){
      if(!params){
      toastEvent.setParams({
      "title": "TOAST ERROR!",
      "type": "error",
      "message": "Toast Param not defined"
      });
      toastEvent.fire();
      } else{
      toastEvent.setParams(params);
      toastEvent.fire();
      }
      } else{
      alert(params.message);
      }
      },
      })

      Sub Component: SubComponent.cmp - Extends Base Component in Component Definition

      <aura:component implements="force:appHostable,flexipage:availableForAllPageTypes"

      extends="c:Base" controller="AccountController" access="global" >

      <aura:attribute name="data" type="Account[]"/>
      <aura:handler name="init" action="{!c.doInit}" value="{!this}"/>

      <aura:iteration items="{!v.data}" var="acc">
      <p><lightning:formattedText value="{!acc.Name}" /></p>
      </aura:iteration>
      </aura:component>

      Sub Component Controller - SubComponentController.js

      ({

      doInit : function(component, event, helper) {

      helper.getAllAccounts(component, helper);

      },

      })

      Sub Component Helper - SubComponentHelper.js

      ({

      getAllAccounts : function(component, helper) {

      //Calling base component's helper method to call Aura Method

      helper.callServer(component, "c.getAccounts",

      function(response){

      if(response){

      component.set("v.data", response);

      //Calling showToast method of Base component

      helper.showToast({

      "title": "SUCCESS",

      "type": "success",

      "message": "Account details are loaded"

      });

      }

      });

      },

      })

      This is how you can share the same code between multiple components and avoid boiler plate codes.

      Few Important Points :

      • Attributes of the component markup, Controller and Helper methods gets inherited and can be used by Sub Components. Along with these, events are also get inherited which can be handled by both Base and Sub Components.
      • You must make your base component, either abstract=true or extensible=true.
      • Your Base component markup must include “{!v.body}”

      Hope this will help.

      Thanks

    Log In to reply.

    • Public
    • All Members
    • My Connections
    • Only Me
    • Public
    • All Members
    • My Connections
    • Only Me
    • Public
    • All Members
    • My Connections
    • Only Me

    Popular Salesforce Blogs

    Salesforce-service-cloud-customization-update

    8 Salesforce Service Cloud Enhancements to Deliver Exceptional Customer Experience

    Blog in Salesforce Products

    A customized Salesforce Service Cloud can go a long way in helping you deliver exceptional customer experiences. But what is it is that you can…

    Cloud Computing, Product Management Tools, Salesforce Customization, Salesforce Integration, Salesforce Service Cloud
    Ankur Gupta Oct 30, 2018
    7,159  Views
    events in lightning

    What Are Events In Salesforce Lightning Component

    Blog in Others

    Event Introduction Lightning framework uses event-driven programming Events handle communication between two components. Events are fired from the Javascript controller by using fire() predefined method.…

    Application, Application Event, Child Component, Component Event, Event
    Kirandeep Jul 27, 2020
    7,936  Views

    Salesforce Code Builder is Officially Released

    Blog in Salesforce Releases

    Salesforce Code Builder has been officially released and is now generally available, offering a new web-based integrated development environment (IDE) that seamlessly incorporates open, modern,…

    AppExchange, Code Builder, CodeGen, CRM Configuration, Data Residence Requirements
    Cloudmetic Nov 29, 2023
    2,151  Views

    Popular Salesforce Videos

    How Cyntexa Helped An Educational Firm | Salesforce Training

    How Cyntexa Helped An Educational Firm | Salesforce Training

    Video in Data, Salesforce Training

    Here is a testimony of how Cyntexa helped an educational firm build a single place to keep all data. Swipe to know what the challenges…

    Salesforce Training, salesforce, Salesforce Video, Salesforce Learning, Data
    Cyntexa May 18, 2022
    1,517  Views
    What is Salesforce? Career Opportunities and Job Roles in Salesforce!

    What is Salesforce? Career Opportunities and Job Roles in Salesforce!

    Video in Others

    This video deals with the most important aspect of Salesforce. You'll learn the following things from this video:- 1. What is Salesforce? 2. What business…

    Salesforce Jobs, Salesforce Careers, Salesforce Learning Steps For Beginners, Easy Way To Learn Salesforce, Business Logic
    harshit Feb 20, 2019
    2,151  Views
    How to Edit or Change Product Schedules in Salesforce

    How to Edit or Change Product Schedules in Salesforce

    Video in Salesforce Products

    Use product schedules to determine the payment and delivery cycles for products that are paid or delivered over time. In Lightning Experience, customize schedules with…

    Salesforce Training, Salesforce Tutorial, salesforce, Salesforce Video, Validation Rules
    Rupal Kakkar Jun 14, 2022
    2,576  Views
    Footer Forcetalks logo

    support@forcetalks.com

    • twitterx

    Quick Links

    Advertise with Us

    Salesforce® Articles

    Dreamforce 2023

    Top Salesforce® Bloggers 2023

    Top Salesforce Consultants

    Get Listed

    Company

    Contact Us

    About Us

    Privacy Policy

    Terms & Conditions

    InsightHub

    Salesforce Blogs

    Salesforce Videos

    Salesforce Groups

    Salesforce Jobs

    © 2026 - Forcetalks ● All Rights Reserved

    Salesforce® is a trademark of Salesforce® Inc. No claim is made to the exclusive right to use “Salesforce”. Any services offered within the Forcetalks website/app are not sponsored or endorsed by Salesforce®.

    We use cookies to enhance your browsing experience. Please see our privacy policy if you'd like more information on our use of cookies.