వెబ్ కాంపోనెంట్ లైఫ్సైకిల్పై లోతైన విశ్లేషణ, కస్టమ్ ఎలిమెంట్ క్రియేషన్, కనెక్షన్, అట్రిబ్యూట్ మార్పులు మరియు డిస్కనెక్షన్ను వివరిస్తుంది. ఆధునిక వెబ్ అప్లికేషన్ల కోసం పటిష్టమైన మరియు పునర్వినియోగ కాంపోనెంట్లను నిర్మించడం నేర్చుకోండి.
వెబ్ కాంపోనెంట్ లైఫ్సైకిల్: కస్టమ్ ఎలిమెంట్ క్రియేషన్ మరియు మేనేజ్మెంట్లో నైపుణ్యం సాధించడం
ఆధునిక వెబ్ డెవలప్మెంట్లో పునర్వినియోగ మరియు ఎన్క్యాప్సులేటెడ్ UI ఎలిమెంట్లను నిర్మించడానికి వెబ్ కాంపోనెంట్లు ఒక శక్తివంతమైన సాధనం. పటిష్టమైన, నిర్వహించదగిన మరియు సమర్థవంతమైన అప్లికేషన్లను రూపొందించడానికి వెబ్ కాంపోనెంట్ యొక్క లైఫ్సైకిల్ను అర్థం చేసుకోవడం చాలా ముఖ్యం. ఈ సమగ్ర గైడ్ వెబ్ కాంపోనెంట్ లైఫ్సైకిల్లోని వివిధ దశలను విశ్లేషిస్తుంది, కస్టమ్ ఎలిమెంట్ క్రియేషన్ మరియు మేనేజ్మెంట్లో నైపుణ్యం సాధించడంలో మీకు సహాయపడటానికి వివరణాత్మకమైన ఉదాహరణలను అందిస్తుంది.
వెబ్ కాంపోనెంట్లు అంటే ఏమిటి?
వెబ్ కాంపోనెంట్లు అనేవి వెబ్ ప్లాట్ఫారమ్ APIల సమాహారం, ఇవి ఎన్క్యాప్సులేటెడ్ స్టైలింగ్ మరియు ప్రవర్తనతో పునర్వినియోగ కస్టమ్ HTML ఎలిమెంట్లను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి. వీటిలో మూడు ప్రధాన టెక్నాలజీలు ఉంటాయి:
- కస్టమ్ ఎలిమెంట్స్ (Custom Elements): మీ స్వంత HTML ట్యాగ్లను మరియు వాటికి సంబంధించిన జావాస్క్రిప్ట్ లాజిక్ను నిర్వచించడానికి మిమ్మల్ని అనుమతిస్తాయి.
- షాడో DOM (Shadow DOM): కాంపోనెంట్ కోసం ఒక ప్రత్యేక DOM ట్రీని సృష్టించడం ద్వారా ఎన్క్యాప్సులేషన్ను అందిస్తుంది, ఇది గ్లోబల్ డాక్యుమెంట్ స్టైల్స్ మరియు స్క్రిప్ట్ల నుండి దాన్ని రక్షిస్తుంది.
- HTML టెంప్లేట్లు (HTML Templates): పునర్వినియోగ HTML స్నిప్పెట్లను నిర్వచించడానికి మిమ్మల్ని అనుమతిస్తాయి, వీటిని సమర్థవంతంగా క్లోన్ చేసి DOMలోకి చేర్చవచ్చు.
వెబ్ కాంపోనెంట్లు కోడ్ పునర్వినియోగాన్ని ప్రోత్సహిస్తాయి, నిర్వహణ సామర్థ్యాన్ని మెరుగుపరుస్తాయి మరియు సంక్లిష్టమైన యూజర్ ఇంటర్ఫేస్లను ఒక మాడ్యులర్ మరియు వ్యవస్థీకృత పద్ధతిలో నిర్మించడానికి అనుమతిస్తాయి. ఇవి అన్ని ప్రధాన బ్రౌజర్లచే మద్దతు ఇవ్వబడతాయి మరియు ఏదైనా జావాస్క్రిప్ట్ ఫ్రేమ్వర్క్ లేదా లైబ్రరీతో లేదా ఏ ఫ్రేమ్వర్క్ లేకుండా కూడా ఉపయోగించవచ్చు.
వెబ్ కాంపోనెంట్ లైఫ్సైకిల్
వెబ్ కాంపోనెంట్ లైఫ్సైకిల్ అనేది ఒక కస్టమ్ ఎలిమెంట్ దాని సృష్టి నుండి DOM నుండి తొలగించబడే వరకు గడిచే వివిధ దశలను నిర్వచిస్తుంది. ఈ దశలను అర్థం చేసుకోవడం ద్వారా మీరు సరైన సమయంలో నిర్దిష్ట చర్యలను చేయగలరు, ఇది మీ కాంపోనెంట్ సరిగ్గా మరియు సమర్థవంతంగా ప్రవర్తించేలా చేస్తుంది.
ప్రధాన లైఫ్సైకిల్ పద్ధతులు:
- constructor(): ఎలిమెంట్ సృష్టించబడినప్పుడు లేదా అప్గ్రేడ్ చేయబడినప్పుడు కన్స్ట్రక్టర్ పిలువబడుతుంది. ఇక్కడే మీరు కాంపోనెంట్ యొక్క స్టేట్ను ప్రారంభించి దాని షాడో DOMను (అవసరమైతే) సృష్టిస్తారు.
- connectedCallback(): కస్టమ్ ఎలిమెంట్ డాక్యుమెంట్ యొక్క DOMకి కనెక్ట్ చేయబడిన ప్రతిసారీ ఇది పిలువబడుతుంది. డేటాను ఫెచ్ చేయడం, ఈవెంట్ లిజనర్లను జోడించడం లేదా కాంపోనెంట్ యొక్క ప్రారంభ కంటెంట్ను రెండర్ చేయడం వంటి సెటప్ పనులను చేయడానికి ఇది మంచి ప్రదేశం.
- disconnectedCallback(): కస్టమ్ ఎలిమెంట్ డాక్యుమెంట్ యొక్క DOM నుండి డిస్కనెక్ట్ చేయబడిన ప్రతిసారీ ఇది పిలువబడుతుంది. మెమరీ లీక్లను నివారించడానికి ఈవెంట్ లిజనర్లను తొలగించడం లేదా టైమర్లను రద్దు చేయడం వంటి వనరులను శుభ్రం చేయడానికి ఇది సరైన స్థలం.
- attributeChangedCallback(name, oldValue, newValue): కస్టమ్ ఎలిమెంట్ యొక్క అట్రిబ్యూట్లలో ఒకటి జోడించబడినప్పుడు, తీసివేయబడినప్పుడు, అప్డేట్ చేయబడినప్పుడు లేదా భర్తీ చేయబడిన ప్రతిసారీ ఇది పిలువబడుతుంది. ఇది కాంపోనెంట్ యొక్క అట్రిబ్యూట్లలో మార్పులకు ప్రతిస్పందించడానికి మరియు దాని ప్రవర్తనను తదనుగుణంగా నవీకరించడానికి మిమ్మల్ని అనుమతిస్తుంది. మీరు
observedAttributes
స్టాటిక్ గెట్టర్ని ఉపయోగించి ఏ అట్రిబ్యూట్లను గమనించాలనుకుంటున్నారో పేర్కొనాలి. - adoptedCallback(): కస్టమ్ ఎలిమెంట్ ఒక కొత్త డాక్యుమెంట్కు తరలించబడిన ప్రతిసారీ ఇది పిలువబడుతుంది. ఇది ఐఫ్రేమ్లతో పనిచేసేటప్పుడు లేదా అప్లికేషన్ యొక్క వివిధ భాగాల మధ్య ఎలిమెంట్లను తరలించేటప్పుడు సంబంధితంగా ఉంటుంది.
ప్రతి లైఫ్సైకిల్ పద్ధతిలోకి లోతుగా వెళ్లడం
1. constructor()
మీ కస్టమ్ ఎలిమెంట్ యొక్క కొత్త ఇన్స్టాన్స్ సృష్టించబడినప్పుడు పిలువబడే మొదటి పద్ధతి కన్స్ట్రక్టర్. ఇది వీటికి అనువైన ప్రదేశం:
- కాంపోనెంట్ యొక్క అంతర్గత స్టేట్ను ప్రారంభించడం.
this.attachShadow({ mode: 'open' })
లేదాthis.attachShadow({ mode: 'closed' })
ఉపయోగించి షాడో DOMను సృష్టించడం.mode
అనేది షాడో DOM కాంపోనెంట్ వెలుపల జావాస్క్రిప్ట్ నుండి యాక్సెస్ చేయగలదా (open
) లేదా లేదా (closed
) అని నిర్ధారిస్తుంది. సులభంగా డీబగ్గింగ్ కోసంopen
ఉపయోగించడం సాధారణంగా సిఫార్సు చేయబడింది.- ఈవెంట్ హ్యాండ్లర్ పద్ధతులను కాంపోనెంట్ ఇన్స్టాన్స్కు బైండ్ చేయడం (
this.methodName = this.methodName.bind(this)
ఉపయోగించి), హ్యాండ్లర్ లోపలthis
అనేది కాంపోనెంట్ ఇన్స్టాన్స్ను సూచిస్తుందని నిర్ధారించుకోవడానికి.
కన్స్ట్రక్టర్ కోసం ముఖ్యమైన పరిగణనలు:
- మీరు కన్స్ట్రక్టర్లో ఎటువంటి DOM మానిప్యులేషన్ చేయకూడదు. ఎలిమెంట్ ఇంకా DOMకి పూర్తిగా కనెక్ట్ కాలేదు మరియు దానిని సవరించడానికి ప్రయత్నించడం ఊహించని ప్రవర్తనకు దారితీయవచ్చు. DOM మానిప్యులేషన్ కోసం
connectedCallback
ఉపయోగించండి. - కన్స్ట్రక్టర్లో అట్రిబ్యూట్లను ఉపయోగించడం మానుకోండి. అట్రిబ్యూట్లు ఇంకా అందుబాటులో ఉండకపోవచ్చు. బదులుగా
connectedCallback
లేదాattributeChangedCallback
ఉపయోగించండి. - మొదట
super()
ను కాల్ చేయండి. మీరు మరొక క్లాస్ (సాధారణంగాHTMLElement
) నుండి ఎక్స్టెండ్ చేస్తే ఇది తప్పనిసరి.
ఉదాహరణ:
class MyCustomElement extends HTMLElement {
constructor() {
super();
// Create a shadow root
this.shadow = this.attachShadow({mode: 'open'});
this.message = "Hello, world!";
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
alert(this.message);
}
}
2. connectedCallback()
కస్టమ్ ఎలిమెంట్ డాక్యుమెంట్ యొక్క DOMకి కనెక్ట్ చేయబడినప్పుడు connectedCallback
పిలువబడుతుంది. ఇది వీటికి ప్రాథమిక ప్రదేశం:
- API నుండి డేటాను ఫెచ్ చేయడం.
- కాంపోనెంట్ లేదా దాని షాడో DOMకి ఈవెంట్ లిజనర్లను జోడించడం.
- కాంపోనెంట్ యొక్క ప్రారంభ కంటెంట్ను షాడో DOMలోకి రెండర్ చేయడం.
- కన్స్ట్రక్టర్లో తక్షణ పరిశీలన సాధ్యం కానప్పుడు అట్రిబ్యూట్ మార్పులను గమనించడం.
ఉదాహరణ:
class MyCustomElement extends HTMLElement {
// ... constructor ...
connectedCallback() {
// Create a button element
const button = document.createElement('button');
button.textContent = 'Click me!';
button.addEventListener('click', this.handleClick);
this.shadow.appendChild(button);
// Fetch data (example)
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.data = data;
this.render(); // Call a render method to update the UI
});
}
render() {
// Update the Shadow DOM based on the data
const dataElement = document.createElement('p');
dataElement.textContent = JSON.stringify(this.data);
this.shadow.appendChild(dataElement);
}
handleClick() {
alert("Button clicked!");
}
}
3. disconnectedCallback()
కస్టమ్ ఎలిమెంట్ డాక్యుమెంట్ యొక్క DOM నుండి డిస్కనెక్ట్ చేయబడినప్పుడు disconnectedCallback
పిలువబడుతుంది. ఇది వీటికి చాలా ముఖ్యం:
- మెమరీ లీక్లను నివారించడానికి ఈవెంట్ లిజనర్లను తొలగించడం.
- ఏవైనా టైమర్లు లేదా ఇంటర్వెల్లను రద్దు చేయడం.
- కాంపోనెంట్ కలిగి ఉన్న ఏవైనా వనరులను విడుదల చేయడం.
ఉదాహరణ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback ...
disconnectedCallback() {
// Remove the event listener
this.shadow.querySelector('button').removeEventListener('click', this.handleClick);
// Cancel any timers (example)
if (this.timer) {
clearInterval(this.timer);
}
console.log('Component disconnected from the DOM.');
}
}
4. attributeChangedCallback(name, oldValue, newValue)
కస్టమ్ ఎలిమెంట్ యొక్క అట్రిబ్యూట్ మార్చబడినప్పుడల్లా attributeChangedCallback
పిలువబడుతుంది, కానీ observedAttributes
స్టాటిక్ గెట్టర్లో జాబితా చేయబడిన అట్రిబ్యూట్లకు మాత్రమే. ఈ పద్ధతి వీటికి అవసరం:
- అట్రిబ్యూట్ విలువలలో మార్పులకు ప్రతిస్పందించడం మరియు కాంపోనెంట్ యొక్క ప్రవర్తన లేదా రూపాన్ని నవీకరించడం.
- అట్రిబ్యూట్ విలువలను ధృవీకరించడం.
ముఖ్యమైన అంశాలు:
- మీరు తప్పనిసరిగా
observedAttributes
అనే స్టాటిక్ గెట్టర్ను నిర్వచించాలి, ఇది మీరు గమనించాలనుకుంటున్న అట్రిబ్యూట్ పేర్ల శ్రేణిని తిరిగి ఇస్తుంది. attributeChangedCallback
అనేదిobservedAttributes
లో జాబితా చేయబడిన అట్రిబ్యూట్లకు మాత్రమే పిలువబడుతుంది.- ఈ పద్ధతి మూడు ఆర్గ్యుమెంట్లను అందుకుంటుంది: మారిన అట్రిబ్యూట్ యొక్క
name
,oldValue
, మరియుnewValue
. - అట్రిబ్యూట్ కొత్తగా జోడించబడితే
oldValue
null
గా ఉంటుంది.
ఉదాహరణ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback, disconnectedCallback ...
static get observedAttributes() {
return ['message', 'data-count']; // Observe the 'message' and 'data-count' attributes
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'message') {
this.message = newValue; // Update the internal state
this.renderMessage(); // Re-render the message
} else if (name === 'data-count') {
const count = parseInt(newValue, 10);
if (!isNaN(count)) {
this.count = count; // Update the internal count
this.renderCount(); // Re-render the count
} else {
console.error('Invalid data-count attribute value:', newValue);
}
}
}
renderMessage() {
// Update the message display in the Shadow DOM
let messageElement = this.shadow.querySelector('.message');
if (!messageElement) {
messageElement = document.createElement('p');
messageElement.classList.add('message');
this.shadow.appendChild(messageElement);
}
messageElement.textContent = this.message;
}
renderCount(){
let countElement = this.shadow.querySelector('.count');
if(!countElement){
countElement = document.createElement('p');
countElement.classList.add('count');
this.shadow.appendChild(countElement);
}
countElement.textContent = `Count: ${this.count}`;
}
}
attributeChangedCallbackను సమర్థవంతంగా ఉపయోగించడం:
- ఇన్పుట్ను ధృవీకరించండి: డేటా సమగ్రతను నిర్ధారించడానికి కొత్త విలువను ధృవీకరించడానికి ఈ కాల్బ్యాక్ను ఉపయోగించండి.
- అప్డేట్లను డిబౌన్స్ చేయండి: గణనపరంగా ఖరీదైన అప్డేట్ల కోసం, అధిక రీ-రెండరింగ్ను నివారించడానికి అట్రిబ్యూట్ మార్పు హ్యాండ్లర్ను డిబౌన్స్ చేయడం పరిగణించండి.
- ప్రత్యామ్నాయాలను పరిగణించండి: సంక్లిష్టమైన డేటా కోసం, అట్రిబ్యూట్లకు బదులుగా ప్రాపర్టీలను ఉపయోగించడం మరియు ప్రాపర్టీ సెట్టర్లో నేరుగా మార్పులను నిర్వహించడం పరిగణించండి.
5. adoptedCallback()
కస్టమ్ ఎలిమెంట్ ఒక కొత్త డాక్యుమెంట్కు తరలించబడినప్పుడు (ఉదా., ఒక ఐఫ్రేమ్ నుండి మరొక దానికి తరలించినప్పుడు) adoptedCallback
పిలువబడుతుంది. ఇది తక్కువగా ఉపయోగించబడే లైఫ్సైకిల్ పద్ధతి, కానీ డాక్యుమెంట్ కాంటెక్ట్స్తో కూడిన మరింత సంక్లిష్టమైన దృశ్యాలతో పనిచేసేటప్పుడు దీని గురించి తెలుసుకోవడం ముఖ్యం.
ఉదాహరణ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback, disconnectedCallback, attributeChangedCallback ...
adoptedCallback() {
console.log('Component adopted into a new document.');
// Perform any necessary adjustments when the component is moved to a new document
// This might involve updating references to external resources or re-establishing connections.
}
}
ఒక కస్టమ్ ఎలిమెంట్ను నిర్వచించడం
మీరు మీ కస్టమ్ ఎలిమెంట్ క్లాస్ను నిర్వచించిన తర్వాత, మీరు దానిని బ్రౌజర్తో customElements.define()
ఉపయోగించి రిజిస్టర్ చేయాలి:
customElements.define('my-custom-element', MyCustomElement);
మొదటి ఆర్గ్యుమెంట్ మీ కస్టమ్ ఎలిమెంట్ కోసం ట్యాగ్ పేరు (ఉదా., 'my-custom-element'
). ప్రామాణిక HTML ఎలిమెంట్లతో వైరుధ్యాలను నివారించడానికి ట్యాగ్ పేరులో తప్పనిసరిగా ఒక హైఫన్ (-
) ఉండాలి.
రెండవ ఆర్గ్యుమెంట్ మీ కస్టమ్ ఎలిమెంట్ యొక్క ప్రవర్తనను నిర్వచించే క్లాస్ (ఉదా., MyCustomElement
).
కస్టమ్ ఎలిమెంట్ను నిర్వచించిన తర్వాత, మీరు దానిని మీ HTMLలో మరే ఇతర HTML ఎలిమెంట్ లాగా ఉపయోగించవచ్చు:
<my-custom-element message="Hello from attribute!" data-count="10"></my-custom-element>
వెబ్ కాంపోనెంట్ లైఫ్సైకిల్ మేనేజ్మెంట్ కోసం ఉత్తమ పద్ధతులు
- కన్స్ట్రక్టర్ను తేలికగా ఉంచండి: కన్స్ట్రక్టర్లో DOM మానిప్యులేషన్ లేదా సంక్లిష్టమైన గణనలను చేయడం మానుకోండి. ఈ పనుల కోసం
connectedCallback
ఉపయోగించండి. disconnectedCallback
లో వనరులను శుభ్రం చేయండి: మెమరీ లీక్లను నివారించడానికిdisconnectedCallback
లో ఎల్లప్పుడూ ఈవెంట్ లిజనర్లను తొలగించండి, టైమర్లను రద్దు చేయండి మరియు వనరులను విడుదల చేయండి.observedAttributes
ను తెలివిగా ఉపయోగించండి: మీరు వాస్తవంగా ప్రతిస్పందించాల్సిన అట్రిబ్యూట్లను మాత్రమే గమనించండి. అనవసరమైన అట్రిబ్యూట్లను గమనించడం పనితీరుపై ప్రభావం చూపుతుంది.- రెండరింగ్ లైబ్రరీని ఉపయోగించడం పరిగణించండి: సంక్లిష్టమైన UI అప్డేట్ల కోసం, ప్రక్రియను సులభతరం చేయడానికి మరియు పనితీరును మెరుగుపరచడానికి LitElement లేదా uhtml వంటి రెండరింగ్ లైబ్రరీని ఉపయోగించడం పరిగణించండి.
- మీ కాంపోనెంట్లను క్షుణ్ణంగా పరీక్షించండి: మీ కాంపోనెంట్లు వాటి లైఫ్సైకిల్ అంతటా సరిగ్గా ప్రవర్తిస్తున్నాయని నిర్ధారించుకోవడానికి యూనిట్ పరీక్షలు రాయండి.
ఉదాహరణ: ఒక సాధారణ కౌంటర్ కాంపోనెంట్
వెబ్ కాంపోనెంట్ లైఫ్సైకిల్ వాడకాన్ని ప్రదర్శించే ఒక సాధారణ కౌంటర్ కాంపోనెంట్ను సృష్టిద్దాం:
class CounterComponent extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.count = 0;
this.increment = this.increment.bind(this);
}
connectedCallback() {
this.render();
this.shadow.querySelector('button').addEventListener('click', this.increment);
}
disconnectedCallback() {
this.shadow.querySelector('button').removeEventListener('click', this.increment);
}
increment() {
this.count++;
this.render();
}
render() {
this.shadow.innerHTML = `
<p>Count: ${this.count}</p>
<button>Increment</button>
`;
}
}
customElements.define('counter-component', CounterComponent);
ఈ కాంపోనెంట్ ఒక అంతర్గత count
వేరియబుల్ను నిర్వహిస్తుంది మరియు బటన్ క్లిక్ చేసినప్పుడు ప్రదర్శనను నవీకరిస్తుంది. connectedCallback
ఈవెంట్ లిజనర్ను జోడిస్తుంది మరియు disconnectedCallback
దానిని తొలగిస్తుంది.
అధునాతన వెబ్ కాంపోనెంట్ టెక్నిక్లు
1. అట్రిబ్యూట్లకు బదులుగా ప్రాపర్టీలను ఉపయోగించడం
సాధారణ డేటా కోసం అట్రిబ్యూట్లు ఉపయోగకరంగా ఉన్నప్పటికీ, ప్రాపర్టీలు మరింత సౌలభ్యం మరియు టైప్ భద్రతను అందిస్తాయి. మీరు మీ కస్టమ్ ఎలిమెంట్పై ప్రాపర్టీలను నిర్వచించవచ్చు మరియు వాటిని ఎలా యాక్సెస్ మరియు సవరించాలో నియంత్రించడానికి గెట్టర్లు మరియు సెట్టర్లను ఉపయోగించవచ్చు.
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this._data = null; // Use a private property to store the data
}
get data() {
return this._data;
}
set data(value) {
this._data = value;
this.renderData(); // Re-render the component when the data changes
}
connectedCallback() {
// Initial rendering
this.renderData();
}
renderData() {
// Update the Shadow DOM based on the data
this.shadow.innerHTML = `<p>Data: ${JSON.stringify(this._data)}</p>`;
}
}
customElements.define('my-data-element', MyCustomElement);
అప్పుడు మీరు జావాస్క్రిప్ట్లో data
ప్రాపర్టీని నేరుగా సెట్ చేయవచ్చు:
const element = document.querySelector('my-data-element');
element.data = { name: 'John Doe', age: 30 };
2. కమ్యూనికేషన్ కోసం ఈవెంట్లను ఉపయోగించడం
వెబ్ కాంపోనెంట్లు ఒకదానితో ఒకటి మరియు బయటి ప్రపంచంతో కమ్యూనికేట్ చేయడానికి కస్టమ్ ఈవెంట్లు ఒక శక్తివంతమైన మార్గం. మీరు మీ కాంపోనెంట్ నుండి కస్టమ్ ఈవెంట్లను డిస్పాచ్ చేయవచ్చు మరియు మీ అప్లికేషన్ యొక్క ఇతర భాగాలలో వాటి కోసం వినవచ్చు.
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback ...
dispatchCustomEvent() {
const event = new CustomEvent('my-custom-event', {
detail: { message: 'Hello from the component!' },
bubbles: true, // Allow the event to bubble up the DOM tree
composed: true // Allow the event to cross the shadow DOM boundary
});
this.dispatchEvent(event);
}
}
customElements.define('my-event-element', MyCustomElement);
// Listen for the custom event in the parent document
document.addEventListener('my-custom-event', (event) => {
console.log('Custom event received:', event.detail.message);
});
3. షాడో DOM స్టైలింగ్
షాడో DOM స్టైల్ ఎన్క్యాప్సులేషన్ను అందిస్తుంది, స్టైల్స్ కాంపోనెంట్ లోపలికి లేదా బయటికి లీక్ అవ్వకుండా నిరోధిస్తుంది. మీరు షాడో DOM లోపల CSS ఉపయోగించి మీ వెబ్ కాంపోనెంట్లను స్టైల్ చేయవచ్చు.
ఇన్లైన్ స్టైల్స్:
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.shadow.innerHTML = `
<style>
p {
color: blue;
}
</style>
<p>This is a styled paragraph.</p>
`;
}
}
ఎక్స్టర్నల్ స్టైల్షీట్లు:
మీరు షాడో DOMలోకి ఎక్స్టర్నల్ స్టైల్షీట్లను కూడా లోడ్ చేయవచ్చు:
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
const linkElem = document.createElement('link');
linkElem.setAttribute('rel', 'stylesheet');
linkElem.setAttribute('href', 'my-component.css');
this.shadow.appendChild(linkElem);
this.shadow.innerHTML += '<p>This is a styled paragraph.</p>';
}
}
ముగింపు
ఆధునిక వెబ్ అప్లికేషన్ల కోసం పటిష్టమైన మరియు పునర్వినియోగ కాంపోనెంట్లను నిర్మించడానికి వెబ్ కాంపోనెంట్ లైఫ్సైకిల్లో నైపుణ్యం సాధించడం చాలా అవసరం. వివిధ లైఫ్సైకిల్ పద్ధతులను అర్థం చేసుకోవడం మరియు ఉత్తమ పద్ధతులను ఉపయోగించడం ద్వారా, మీరు నిర్వహించడానికి సులభమైన, సమర్థవంతమైన మరియు మీ అప్లికేషన్ యొక్క ఇతర భాగాలతో సజావుగా అనుసంధానించబడే కాంపోనెంట్లను సృష్టించవచ్చు. ఈ గైడ్ వెబ్ కాంపోనెంట్ లైఫ్సైకిల్ యొక్క సమగ్ర అవలోకనాన్ని అందించింది, ఇందులో వివరణాత్మకమైన వివరణలు, ఆచరణాత్మక ఉదాహరణలు మరియు అధునాతన టెక్నిక్లు ఉన్నాయి. వెబ్ కాంపోనెంట్ల శక్తిని స్వీకరించండి మరియు మాడ్యులర్, నిర్వహించదగిన మరియు స్కేలబుల్ వెబ్ అప్లికేషన్లను నిర్మించండి.
మరింత నేర్చుకోవడానికి:
- MDN Web Docs: వెబ్ కాంపోనెంట్లు మరియు కస్టమ్ ఎలిమెంట్లపై విస్తృతమైన డాక్యుమెంటేషన్.
- WebComponents.org: వెబ్ కాంపోనెంట్ డెవలపర్ల కోసం ఒక కమ్యూనిటీ-ఆధారిత వనరు.
- LitElement: వేగవంతమైన, తేలికపాటి వెబ్ కాంపోనెంట్లను సృష్టించడానికి ఒక సాధారణ బేస్ క్లాస్.