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 to retrieve 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 seen in the provided code, creating a JavaScript file and a meta file is all that’s required for the LWC to function as a JavaScript library. Observe the function defined using the ‘export’ keyword. It’s possible to have multiple export methods within the same LWC, allowing their utilization as a library in your project.
To employ the above method in any LWC component, use the following syntax:
<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>
