In this article, we’ll craft a Lightning Web Component intended for sharing as a JavaScript library among other LWCs.
We’ll create an LWC Component serving as a utility method for extracting query parameters, demonstrated below:
//Method to read parameter from query string
export function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>48.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>
As observed in the code above, all that’s required is the creation of a JavaScript file and a metadata file for the LWC to function as a JavaScript library. Notice how the function is defined using the ‘export’ keyword. Multiple export methods can exist within the same LWC, serving as a library in your project.
To utilize the aforementioned method in any LWC component, follow the syntax below:
<template> ... Some UI related code here </template>
import { LightningElement , track } from 'lwc';
//Importing reusable LWC Component as Javascript utility
import {getUrlParameter } from 'c/JSUtility';
export default class DemoWrapperLWC extends LightningElement {
//Some track variables define
//......
//.. Some code
//Similar to init method in Aura
connectedCallback() {
//Note - We are NOT using "this" keyword to access method getUrlParameter
let param1 = getUrlParameter('param1');
console.log('Found Parameter value for param1'+param1);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>48.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__AppPage</target>
<target>lightning__RecordPage</target>
<target>lightning__HomePage</target>
<target>lightningCommunity__Page</target>
<target>lightningCommunity__Default</target>
</targets>
</LightningComponentBundle>
