{"id":8680,"date":"2025-03-19T22:12:23","date_gmt":"2025-03-19T16:42:23","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=8680"},"modified":"2025-03-19T22:12:27","modified_gmt":"2025-03-19T16:42:27","slug":"slots-in-javascript","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/slots-in-javascript\/","title":{"rendered":"Slots in Javascript"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong><em>Introduction:<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In JavaScript, we can create reusable web components, which is a key feature that allows us to avoid repeating code. A crucial aspect of web components is the use of slots, which help manage the content displayed within templates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>What are slots?<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Slots are placeholders within a shadow DOM, where you can insert the desired HTML content. They enhance the reusability and flexibility of web components, allowing for dynamic content insertion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To define a slot we use &lt;slot>&lt;\/slot>. The content is placed between the tags, allowing us to inject external content and dynamically render it within the component.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example: <code>&lt;slot>Default Content&lt;\/slot><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Named Slots:<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To define multiple slots, we can assign unique names to each one for differentiation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;slot name=&#8221;header&#8221;>Default Header Content&lt;\/slot><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;slot name=&#8221;footer&#8221;>Default Footer Content&lt;\/slot><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I am defining the template with slots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&lt;template id=&#8221;user-card-template&#8221;&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;style&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; .card {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; border: 1px solid #ccc;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; max-width: 400px;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; .header {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; color: red;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; .footer {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; color: green;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;\/style&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;div class=&#8221;card&#8221;&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &lt;div class=&#8221;header&#8221;&gt;&lt;slot name=&#8221;header&#8221;&gt;Default Header Content&lt;\/slot&gt;&lt;\/div&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &lt;div class=&#8221;footer&#8221;&gt;&lt;slot name=&#8221;footer&#8221;&gt;Default Footer Content&lt;\/slot&gt;&lt;\/div&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;\/div&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0 &lt;\/template><br>&lt;script&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; class UserCard extends HTMLElement {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; constructor() {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const template = document.getElementById(&#8220;user-card-template&#8221;);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const shadowRoot = this.attachShadow({ mode: &#8220;open&#8221; });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shadowRoot.appendChild(template.content.cloneNode(true));<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; customElements.define(&#8220;user-card&#8221;, UserCard);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;\/script&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;user-card&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;h2 slot=&#8221;header&#8221;&gt;Name: John&lt;\/h2&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;div slot=&#8221;footer&#8221;&gt;Footer&lt;\/div&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;\/user-card&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &lt;user-card&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;h2 slot=&#8221;header&#8221;&gt;Name: Jim&lt;\/h2&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;div slot=&#8221;footer&#8221;&gt;Footer2 content&lt;\/div&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0 \u00a0 &lt;\/user-card><br><strong><em>Output:<\/em><\/strong><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2025\/03\/image-1.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"612\" height=\"352\" src=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2025\/03\/image-1.png\" alt=\"\" class=\"wp-image-8681\" srcset=\"https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2025\/03\/image-1.png 612w, https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2025\/03\/image-1-300x173.png 300w, https:\/\/pheonixsolutions.com\/blog\/wp-content\/uploads\/2025\/03\/image-1-522x300.png 522w\" sizes=\"(max-width: 612px) 100vw, 612px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here two cards are loaded with dynamic contents.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Conclusion:<\/em><\/strong><br>Slots are very important feature in web components which offer flexibility and control over the content distribution. By using default, named slots we can create a powerful and reusable web components.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: In JavaScript, we can create reusable web components, which is a key feature that allows us to avoid repeating [&hellip;]<\/p>\n","protected":false},"author":502,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[],"class_list":["post-8680","post","type-post","status-publish","format-standard","hentry","category-web-architecture","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-2g0","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/502"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=8680"}],"version-history":[{"count":0,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8680\/revisions"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=8680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=8680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=8680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}