gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

一起聊聊Web Components之Slots(實(shí)例詳解)

本篇文章給大家?guī)砹岁P(guān)于Slots的相關(guān)知識(shí),Slots 的作用就是給模板元素傳值,增強(qiáng)模板元素的靈活性和通用性,希望對(duì)大家有幫助。

一起聊聊Web Components之Slots(實(shí)例詳解)

熟悉 Vue 的同學(xué)應(yīng)該都知道”插槽(slot)“的概念,通過使用插槽可以讓頁(yè)面內(nèi)容的組織更加靈活。

在 Web Components 體系中也有插槽的概念,今天我們就來具體了解一下 Slots,本文主要包括以下內(nèi)容:

  • 為什么要用 Slots ?
  • Slots 的相關(guān)特性

Slots 的作用

我們首先來看一個(gè)模板元素:

<template>     <p class = "header">MY CARD</p>     <p class="details">         My name is 編程三昧。    </p></template>

既然是模板,那就意味著在很多地方都會(huì)使用到它,但是,這里會(huì)存在一個(gè)問題:所有使用這個(gè)模板的地方都將顯示模板中的內(nèi)容,即并不是所有人的名字都叫 ”編程三昧“。

在這種情況下,叫其他名字的人是沒法使用這個(gè)模板的,顯然,這就和使用模板的初衷相違背了,這個(gè)模板的使用范圍太過狹小,不存在通用性。

想要使得這個(gè)模板具有通用性,其關(guān)鍵點(diǎn)在于 .details 中顯示的內(nèi)容是否具有通用性。

開動(dòng)腦筋想一想,我們是不是可以將其中的”編程三昧“設(shè)為動(dòng)態(tài)內(nèi)容,誰使用這個(gè)模板,誰就傳入自己的名字。恰好, Slots(插槽)就可以實(shí)現(xiàn)這種效果,具體如下:

<!--在模板中使用 slot 進(jìn)行占位--><template id="cardTmp">     <p class="header">MY CARD</p>     <p class="details">         My name is <slot name="userName">編程三昧</slot>。    </p></template><!--在使用上面模板的自定義元素中給 slot 傳值--><my-card>     <span slot="userName">插槽傳值</slot></my-card><my-card>     <span slot="userName">web Components</slot></my-card>

其對(duì)應(yīng)的 JS 代碼如下:

class MyCard extends HTMLElement {     constructor () {         super();         const template = document.getElementById('cardTmp');         const templateContent = template.content;          this.attachShadow({mode: 'open'}).appendChild(             templateContent.cloneNode(true)         );     }}customElements.define('my-card', MyCard);

實(shí)現(xiàn)效果:

一起聊聊Web Components之Slots(實(shí)例詳解)

通過上面的例子,我們可以用一句話總結(jié) Slots 的作用:Slots 的作用就是給模板元素傳值,增強(qiáng)模板元素的靈活性和通用性。

Slots 的相關(guān)特性

對(duì)于 Slots 的相關(guān)特性,我通過問答的形式逐一解釋。

Slots 的 name 屬性有什么作用?

帶有指定 name 的 Slots 被稱為 ”具名插槽“,name 是 slot 的唯一標(biāo)識(shí)。

在引入插槽內(nèi)容的元素上需要使用與 Slots.name 值相同的 slot 屬性。看下面的代碼:

<template id="cardTmp">     <p class="header">MY CARD</p>     <p class="details">         My name is <slot name="userAge">19</slot>。    </p></template><my-card>     <span slot="userName">編程三昧</slot></my-card><my-card>     <span slot="userName">web Components</slot></my-card><script>     class MyCard extends HTMLElement {         constructor () {             super();             const template = document.getElementById('cardTmp');             const templateContent = template.content;              this.attachShadow({mode: 'open'}).appendChild(                 templateContent.cloneNode(true)             );         }     }     customElements.define('my-card', MyCard);</script>

運(yùn)行效果:

一起聊聊Web Components之Slots(實(shí)例詳解)

因?yàn)閭魅氲?slot 屬性值和 Slots 的 name 屬性值對(duì)不上,所以 Slots 未被插入。

傳值時(shí)的 slot 屬性值必須和 Slots 的 name 屬性值保持一致。

不給 Slots 傳值會(huì)怎樣?

將上面兩個(gè)自定義元素 my-card 中的 span 元素去掉,不傳任何值,即改成這樣:

<my-card></my-card>

運(yùn)行后的效果:

一起聊聊Web Components之Slots(實(shí)例詳解)

可以看到,如果不給 Slots 傳值,那么 Slots 會(huì)顯示它自己預(yù)設(shè)的內(nèi)容

其實(shí)結(jié)合以上兩點(diǎn),還可以得出一個(gè)結(jié)論:如果有引用 Slots ,那只有對(duì)應(yīng) name 的 Slots 內(nèi)容會(huì)被顯示,其余的 Slots 皆不顯示

正常 DOM 中可以使用 Slots 嗎?

這里的”正常 DOM“ 是相對(duì)于 Shadow DOM 來說的,指的是頁(yè)面所在的文檔對(duì)象。

代碼如下:

<slot name="userName">Slots 預(yù)設(shè)值</slot><p slot="userName">bcsm</p>

顯示如下:

一起聊聊Web Components之Slots(實(shí)例詳解)

總結(jié):正常 DOM 中使用 Slots,它會(huì)直接渲染在頁(yè)面上,切不具備插槽效果

Slots 是不是必須用在 Templates 中?

我們前面看到的例子中,Slots 是在 Templates 中,那是不是意味著 Slots 必須要用在 Templates 中才能生效呢?

因?yàn)橐呀?jīng)驗(yàn)證過在正常 DOM 中的 Slots 是無效的,所以我們?cè)?Shadow DOM 中做個(gè)測(cè)試,代碼如下:

<body>     <h1>不在 Templates 中使用 Slots</h1>     <p id="templ">         <slot name="userName">這是 Slots 預(yù)設(shè)值</slot>     </p>     <my-paragraph>         <span slot="userName">編程三昧</span>     </my-paragraph>     <script>         class MyParagraph extends HTMLElement {             constructor () {                 super();                 const template = document.getElementById('templ');                  this.attachShadow({mode: 'open'}).appendChild(                     template.cloneNode(true)                 );             }         }         customElements.define('my-paragraph', MyParagraph);     </script></body>

顯示效果如下:

一起聊聊Web Components之Slots(實(shí)例詳解)

從顯示效果上可以看到,將包含 Slots 的正常 DOM 節(jié)點(diǎn)在追加到 Shadow DOM 后,Slots 顯示傳入的值,也就是說 Slots 是生效了的。

總結(jié):Slots 在 Shadow DOM 中就可生效,并非一定要用在 Templates 中

一個(gè)自定義元素中可以使用多個(gè)同名 Slots 嗎?

看代碼:

<template id="cardTmp">     <p class="header">MY CARD</p>     <p class="details">         My name is <slot name="userName">編程三昧</slot>。    </p></template><my-card>     <span slot="userName">插槽傳值1</span>     <span slot="userName">插槽傳值2</span></my-card><script>     class MyCard extends HTMLElement {         constructor () {             super();             const template = document.getElementById('cardTmp');             const templateContent = template.content;              this.attachShadow({mode: 'open'}).appendChild(                 templateContent.cloneNode(true)             );         }     }     customElements.define('my-card', MyCard);</script>

顯示效果:

一起聊聊Web Components之Slots(實(shí)例詳解)

結(jié)論:一個(gè) Slots 可以接收多個(gè)傳入值,且都會(huì)解析顯示出來

Slots 的傳值元素必須是自定義元素的直接子元素嗎?

上面的例子中,所有給 Slots 傳值的元素都是自定義元素的子元素,那是不是非直接子元素不行呢?

代碼如下:

<template id="cardTmp">     <p class="header">MY CARD</p>     <p class="details">         My name is <slot name="userName">編程三昧</slot>。    </p></template><my-card>     <p>         <span slot="userName">插槽傳值1</span>     </p></my-card><script>     class MyCard extends HTMLElement {         constructor () {             super();             const template = document.getElementById('cardTmp');             const templateContent = template.content;              this.attachShadow({mode: 'open'}).appendChild(                 templateContent.cloneNode(true)             );         }     }     customElements.define('my-card', MyCard);</script>

運(yùn)行效果(傳值失效):

一起聊聊Web Components之Slots(實(shí)例詳解)

結(jié)論:給 Slots 傳值的元素必須是自定義元素的直接子元素,否則傳值失效

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
黑森林福利视频导航| 天美星空大象mv在线观看视频| 国产在线观看福利| 丁香婷婷综合激情| 成人国产一区二区三区| 成人黄色一区二区| 国产原创精品在线| av天堂永久资源网| 国产网站免费在线观看| 久草青青在线观看| 亚欧美在线观看| 日b视频免费观看| 国产精品无码电影在线观看| 成人免费观看在线| 91热这里只有精品| 久久久久久久9| 老司机午夜性大片| 日韩国产一级片| 久久黄色片网站| 国产女教师bbwbbwbbw| 成人免费在线小视频| 日本中文字幕在线不卡| 欧美日韩在线中文| 久久99国产精品一区| 天天操天天爽天天射| 精品少妇人妻av一区二区| aaa一级黄色片| 最新天堂在线视频| 成年网站在线播放| 国产 福利 在线| 成人午夜免费剧场| 8x8ⅹ国产精品一区二区二区| 日本一道本久久| 日本激情综合网| 色噜噜狠狠一区二区三区狼国成人| 黄色一级大片免费| 国产视频一区二区三区在线播放 | 男人日女人逼逼| 久久男人资源站| www.av毛片| 99精品在线免费视频| 日韩国产一级片| 无码熟妇人妻av在线电影| 国产一区二区三区在线免费| 亚洲天堂一区二区在线观看| jizz大全欧美jizzcom| 伊人五月天婷婷| 欧美日韩午夜爽爽| 欧美日韩中文字幕在线播放| 国产1区2区3区中文字幕| www.99热这里只有精品| 欧美日韩大尺度| 中文av一区二区三区| 少妇一晚三次一区二区三区| 亚洲熟妇av一区二区三区漫画| 久久久性生活视频| 中文字幕第17页| 欧美成人xxxxx| 国产高清免费在线| 亚洲精品视频三区| 九九九九九伊人| 三年中文在线观看免费大全中国| 成人在线激情网| 天天干在线影院| 午夜av中文字幕| japanese在线视频| 男的插女的下面视频| 成人免费在线网| 国产成人亚洲精品无码h在线| 成人免费aaa| 激情 小说 亚洲 图片: 伦| 午夜福利123| 久在线观看视频| 无码人妻aⅴ一区二区三区日本| 精品国产三级a∨在线| 精品视频免费在线播放| 五月天婷婷亚洲| 日韩在线综合网| 欧美另类videos| 一路向西2在线观看| 九九热只有这里有精品| 污污网站免费看| 欧美日韩一区二区在线免费观看| 亚洲小说欧美另类激情| 亚洲 欧美 另类人妖| 三级a在线观看| 欧美综合在线观看视频| 97中文字幕在线| 中文字幕av导航| 亚洲精品偷拍视频| 色悠悠久久综合网| 最新中文字幕2018| 日韩一区二区三区不卡视频| 免费在线观看毛片网站| 男人天堂1024| 日韩精品无码一区二区三区免费| 国产成人免费高清视频| 日本人视频jizz页码69| 在线观看高清免费视频| 亚洲第一精品区| 成人免费毛片网| 亚洲免费看av| 欧美大黑帍在线播放| 妺妺窝人体色777777| 少妇性l交大片| 美女在线免费视频| 日韩肉感妇bbwbbwbbw| 在线免费看污网站| 国产一区二区片| 日韩精品视频一二三| 国产亚洲黄色片| 欧美三级理论片| 国产精品网站免费| 国产手机视频在线观看| caopor在线视频| 成年人午夜视频在线观看| 超碰超碰在线观看| 日韩视频在线免费看| 亚洲国产精品女人| 四虎免费在线观看视频| 波多野结衣天堂| 亚洲少妇久久久| 污视频网站观看| 亚洲小视频网站| 拔插拔插华人永久免费| 婷婷激情5月天| 手机看片一级片| 91动漫在线看| av无码久久久久久不卡网站| 99热这里只有精品免费| 国产91porn| www日韩在线观看| 三级一区二区三区| 成年人网站国产| 国产av无码专区亚洲精品| 男人揉女人奶房视频60分| 亚洲 欧美 另类人妖| 欧美亚洲视频一区| 国产成人av影视| 自拍偷拍视频在线| 黄色片网址在线观看| 天天插天天操天天射| 久久久久久www| av噜噜在线观看| 中文字幕国内自拍| 国产v片免费观看| 中文字幕在线乱| 老司机久久精品| 国产精品沙发午睡系列| 国产又大又黄又猛| 青青青青草视频| 久久这里只有精品8| 天堂在线资源视频| 天天想你在线观看完整版电影免费| 国产毛片视频网站| 日本一区午夜艳熟免费| 91视频福利网| www.-级毛片线天内射视视| 爱爱爱爱免费视频| 999在线观看| 国内精品国产三级国产aⅴ久| 国产精品涩涩涩视频网站| 日本成人黄色网| 一级网站在线观看| 日韩视频一二三| 毛片一区二区三区四区| 婷婷丁香激情网| 国内国产精品天干天干| 韩国黄色一级大片| 欧美视频在线观看视频| 欧美丰满熟妇xxxxx| gai在线观看免费高清| 青草网在线观看| 黄色一级片播放| 精品综合久久久久| 日韩av高清在线看片| 色综合手机在线| 亚洲国产精品无码av| 欧美丰满熟妇xxxxx| a天堂资源在线观看| 五月婷婷六月丁香激情| 缅甸午夜性猛交xxxx| 成人免费黄色av| 午夜欧美福利视频| 成年人视频网站免费| 热久久久久久久久| 男人透女人免费视频| 国产91对白刺激露脸在线观看| 15—17女人毛片| 青青在线视频免费| 亚洲精品无码国产| 日韩视频在线视频| 国产视频在线观看网站| 国产精品久久国产| h无码动漫在线观看| 国产日韩成人内射视频| 成人毛片视频网站| aa免费在线观看| 成 人 黄 色 小说网站 s色| 天堂在线中文在线|