成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

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

本篇文章給大家帶來了關于Slots的相關知識,Slots 的作用就是給模板元素傳值,增強模板元素的靈活性和通用性,希望對大家有幫助。

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

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

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

  • 為什么要用 Slots ?
  • Slots 的相關特性

Slots 的作用

我們首先來看一個模板元素:

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

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

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

想要使得這個模板具有通用性,其關鍵點在于 .details 中顯示的內容是否具有通用性。

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

<!--在模板中使用 slot 進行占位--><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>

其對應的 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);

實現效果:

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

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

Slots 的相關特性

對于 Slots 的相關特性,我通過問答的形式逐一解釋。

Slots 的 name 屬性有什么作用?

帶有指定 name 的 Slots 被稱為 ”具名插槽“,name 是 slot 的唯一標識。

在引入插槽內容的元素上需要使用與 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>

運行效果:

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

因為傳入的 slot 屬性值和 Slots 的 name 屬性值對不上,所以 Slots 未被插入。

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

不給 Slots 傳值會怎樣?

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

<my-card></my-card>

運行后的效果:

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

可以看到,如果不給 Slots 傳值,那么 Slots 會顯示它自己預設的內容。

其實結合以上兩點,還可以得出一個結論:如果有引用 Slots ,那只有對應 name 的 Slots 內容會被顯示,其余的 Slots 皆不顯示。

正常 DOM 中可以使用 Slots 嗎?

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

代碼如下:

<slot name="userName">Slots 預設值</slot><p slot="userName">bcsm</p>

顯示如下:

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

總結:正常 DOM 中使用 Slots,它會直接渲染在頁面上,切不具備插槽效果。

Slots 是不是必須用在 Templates 中?

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

因為已經驗證過在正常 DOM 中的 Slots 是無效的,所以我們在 Shadow DOM 中做個測試,代碼如下:

<body>     <h1>不在 Templates 中使用 Slots</h1>     <p id="templ">         <slot name="userName">這是 Slots 預設值</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(實例詳解)

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

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

一個自定義元素中可以使用多個同名 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(實例詳解)

結論:一個 Slots 可以接收多個傳入值,且都會解析顯示出來。

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>

運行效果(傳值失效):

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

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

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
天堂AV无码大芭蕉伊人AV| 小雪被老外黑人撑破了视频| 熟妇高潮精品区一区二区三| 图片区小说区AV区| 亚洲成AV人在线观看成年美女| 欧美最猛黑人XXXⅩ猛男爽| 趴下老子要从后面CAO你| 日韩无套内射视频6| 无码色AV一二区在线播放| 国产又爽又粗又猛的视频| 国产三级在线观看完整版| 精品久久8X国产免费观看| 久久香综合精品久久伊人| 欧美大肚子孕妇疯狂作爱视频 | 亚洲性高清SUV| 4399理论片午午伦夜理片| 差差漫画页面免费漫画欢迎你| 国产成人AV免费网址| 含羞草传媒每天免费三次看剧| 久久精品亚洲男人的天堂| 国产日韩一区在线精品| 精品香蕉99久久久久成人网站| 免费毛片45分钟| 日韩欧美一区二区三区视频| 性生交大片免费看淑女出招| 伊人久久大香线蕉综合网站| おっさんとわたし天堂的资源 | 锕锕锕锕锕锕锕锕好疼小视频软件| 国产SM调教视频在线观看| 精品人无码一区二区三区| 欧美三级不卡在线观看| 无遮挡国产高潮视频免费观看| 亚洲中文字幕成人无码| 八戒.八戒电影免费观看| 国产亚洲成AⅤ人片在线观看麻豆| 国产94在线 | 亚洲| 激情综合色综合啪啪五月丁香搜索 | 成人性生交大片免费看好| 好男人2019在线视频播放观看| 蜜臀AV免费一区二区三区| 鲁一鲁一鲁一鲁一澡| 日产亚洲一卡2卡3卡4卡网站| 亚洲AV成人AV天堂| 2022最新韩国理伦片在线观看| 国产成人无码免费视频在线| 久久香蕉国产线看观看亚洲小说| 日日摸夜夜添夜夜添无码免费视频| 亚洲国产无套无码AV电影| J日本成熟IPHONE69| 国色天香看片影院| 人妻AV综合天堂一区| 亚洲成AV人片在线观看无| きょこんきょうしゃ在线| 娇妻系列交换27部多P小| 人妻熟妇乱又伦精品无码专区 | ZZIIZZII亚洲日本少妇| AV无码精品一区二区三区四区| AV在线一区二区三区| 国产性色强伦免费视频| 欧美成人激情视频| 亚洲国产AV一区二区三区四区 | 中文成人久久久久影院免费观看| 国产AV无码专区亚洲AⅤ蜜芽| 久久亚洲国产成人影院| 偷偷鲁2019丫丫久久| 厨房掀开馊了裙子挺进电影| 狠狠色丁香婷婷久久综合不卡| 国色天香在线视频免费观看| 亚洲AV无码AV吞精久久| 真人无码作爱免费视频禁HNN| 国产精品无码午夜免费影院| 欧美人禽猛交乱配1| 日本少妇三级HD激情在线观看| 亚洲寂寞女人AⅤ| 东京热无码一区二区三区AV| 门徒电影高清完整版在线观看| 性色AV无码专区亚洲AV毛片子| 啊灬啊灬啊灬快灬深用力| 久久人人爽人人人人爽AV| 欧美人妻精品一区二区三区| 亚洲AV素人乱码| 丁香五月开心婷婷激情综合| 免费拗女网站1300部| 亚洲精品亚洲人成在线| 国产精华液一二三区别在哪| 亲生乖女好紧H下| 中国女人内射69XXXXⅩ视频| 护士猛少妇色ⅩXXXX猛叫| 台湾MD豆传媒一区二区| がーるずらっしゅ在线中文 | 国产成人亚洲色成人网站WWW永久四虎 | 色播久久人人爽人人爽人人片AV | 国精产品W灬源码1688伊| 日韩一区二区三区AV| 19禁在线观看漫画视频| 久久国产成人精品国产成人亚洲| 无套内谢的新婚少妇国语播放| 亚洲AV成人无码久久WWW| 成人夜色视频网站在线观看| 男人扒开女人的腿做爽爽视频| 亚洲精品无码专区久久久| 国产偷国产偷亚洲高清人| 天堂久久久久VA久久久久| 成年女人毛片免费观看97| 欧美性色黄大片WWW喷水| 中文字幕人妻AV一区二区| 久久久亚洲欧洲日产国码ΑV| 亚洲爆乳成AV人在线视菜奈实| 国产精品久久久久久久久久免费 | 丁香婷婷激情俺也去俺来也| 欧美金发尤物大战黑人| 中文字字幕在线中文乱码| 久久亚洲日韩AV一区二区三区| 亚洲欧美日韩综合久久久| 黑人大雞巴XXOO视频| 亚洲AV乱码一区二区三区林ゆな| 国产精品久久久久无码AV| 舔高中女生奶头内射视频| 公交车被多男摁住灌浓精| 搡老女人老妇女老熟妇| 粗大猛烈进出高潮视频大全| 日韩亚洲中字无码一区二区三区| 把腿张开老子cao烂你在线视频| 青青草无码精品伊人久久| WWW无人区一码二码三码区别| 欧美大肚子孕妇疯狂作爱视频| 50妺妺窝人体色聚窝窝www| 你太紧了真舒服小说| 99国内精品久久久久久久| 欧美精品成人A在线观看| 97久久久精品综合88久久| 欧美精品色婷婷五月综合| 最新精品国偷自产在线婷婷| 女人两个奶被揉到高潮就不想了| 小猪视频APP永久观看破解| 国产女主播白浆在线看| 亚洲AV成人一区国产精品小说| 国产亚洲欧美日韩亚洲中文色| 亚洲AV无码AV在线播放| 精品无码久久久久久久久久| 亚洲最大AV网站在线观看| 国产精品成人一区二区不卡| 欧美老熟妇乱子伦视频| H无码精品动漫在线观看| 欧美最猛黑人XXXⅩ猛男野外| 菠萝菠萝蜜在线观看| 熟妇人妻中文字幕| AV在线亚洲AV 是全亚洲| 人妻少妇被猛烈进入中文字幕 | 伊人依成久久人综合网| 免费人成在线观看视频播放| MAC水蜜桃色314| 日日噜噜噜夜夜爽爽狠狠视频| 国产精品久久国产三级国| 亚洲成AV人片天堂网| 久久夜色精品国产亚洲AV动态图 | 亚洲一区二区三区成人网站| 久久午夜无码鲁丝片秋霞小说| 最新国产AV无码专区亚洲AVY| 让人爽到湿的小黄书软件下载| 高潮颤抖大叫正在线播放| 亚洲AV网站在线观看| 久久精品国产亚洲精品| 2021国内精品久久久久精品 | 欧美人妻少妇精品久久黑人| 俄罗斯SEVERODVINSK| 亚洲AV高潮黄色毛片| 久久精品国产久精久精| 51无人区码一码二码三码免费| 日本ⅩXXX色视频在线观看| 国产夫妻CCCXXX久久久| 亚洲国产成人久久精品99| 蜜桃AV一区二区三区| 成年网站免费视频黄A站| 午夜亚洲AV日韩AV无码大全| 久久精品免费一区二区三区| AV人摸人人人澡人人超碰下载| 俄罗斯美女做爰XXXⅩ啪啪 | 又色又爽又黄18禁美女裸身无遮 | YY8090韩国理伦片在线| 婷婷成人丁香五月综合激情| 精品人妻一区二区三区四区| 无卡无码无免费毛片| 精品国产一区二区三区国产区| 12一14性XXXXX国产| 少女たちよ在线观看动漫在线观看| 皇帝在御花园进入贵妃的小说| 中文字幕乱码人妻无码久久 | 儿子耕了母亲荒废的田| 亚洲国产婷婷六月丁香| 欧美熟妇激情一区二区三区| 国产精品自在线拍国产手青青机版| 少妇短裙公车被直接进入| 精品国产三级A∨在线| FIREEXⅩ性欧美HD护士| 亚洲 成人 无码 在线观看| 男男喷液抽搐高潮呻吟AV| 国产精品无码专区在线观看| 中文字幕无码一区二区免费 | 日本VPSWINDOWS怀孕|