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

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

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

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

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

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

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

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

Slots 的作用

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

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

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

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

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

開動腦筋想一想,我們是不是可以將其中的”編程三昧“設(shè)為動態(tài)內(nèi)容,誰使用這個模板,誰就傳入自己的名字。恰好, Slots(插槽)就可以實現(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>

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

實現(xiàn)效果:

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

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

Slots 的相關(guān)特性

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

Slots 的 name 屬性有什么作用?

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

在引入插槽內(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>

運行效果:

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

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

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

不給 Slots 傳值會怎樣?

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

<my-card></my-card>

運行后的效果:

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

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

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

正常 DOM 中可以使用 Slots 嗎?

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

代碼如下:

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

顯示如下:

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

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

Slots 是不是必須用在 Templates 中?

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

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

<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(實例詳解)

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

總結(jié):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(實例詳解)

結(jié)論:一個 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(實例詳解)

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国产青草视频在线观看| 在线 | 一区二区三区四区| 99精产国品一二三产品| 高清WINDOWS免费版| 狠狠综合久久AV一区二区| 男女嘿咻发声动态图| 日日摸夜夜爽无码毛片精选| 亚洲AV午夜国产精品无码中文字| 中文无码久久精品| 大战丰满无码人妻50P免费| 黑人大鸡吧操逼日本女人| 妺妺窝人体色WWW看美女| 少妇无码太爽了不卡视频在线看| 亚洲精品无码久久久| AV无码免费一区二区三区| 国产成人亚洲精品无码VR| 久久精品国产国产精品四凭| 全彩十八禁漫画无遮挡| 小诗的公交车日记1一15文| 曰批免费视频播放免费| 粗壮挺进人妻水蜜桃成熟漫画 | 日韩高清在线中文字带字幕| 亚洲AV无码久久寂寞少妇多毛| 中文字幕无码家庭乱欲| 公又粗又大又长挺进我的 | 久久亚洲色WWW成人| 日韩乱码人妻无码中文字幕久久 | 无码A级毛片免费视频内谢5J | 中文字幕一区二区三区乱码| 国产A√精品区二区三区四区| 久久99精品网久久| 日本JAPANESE护士人妻| 亚洲VA欧美VA国产VA综合| 99久久国产宗和精品1上映 | 无码日韩精品一区二区免费暖暖| 一本大道香蕉大L在线吗视频| 成人毛片亚洲高潮无码精品色 | 久久久久无码精品国产蜜桃 | 久久伊人精品青青草原APP| 色婷婷亚洲六月婷婷中文字幕 | 国产精品国产三级欧美二区| 老熟仑妇乱一区二区AV| 试看20分钟做受| 亚洲中文在线精品国产| 成人免费无码大片A毛片直播| 精品VPSWINDOWS妇女| 全球AV集中精品导航福利| 性XXXXBBBB农村小树林| 24小时在线看免费观看直播| 国产精品夜间视频香蕉| 免费看黄A级毛片| 污污污WWW精品国产网站| 在线|国产精品女主播阳台| 国产AV无码专区亚洲精品| 久久久无码精品午夜| 少妇被 到高潮喷出白浆av| 亚洲自偷自拍熟女另类| 肥妇大BBWBBWBBWBBW| 久久久久久中文字幕有精品| 色偷偷人人澡久久超碰97| 亚洲一线产区二线产区区别在哪儿| 处破痛哭A√18成年片免| 久久精品无码AV| 色噜噜狠狠色综合久色AⅤ网| 亚洲中文无码线在线观看 | 国产精品亚韩精品无码A在线| 免费视频玩乳吃奶不遮挡网站| 无码熟妇人妻AV在线影片最多 | 中国内射XXXX6981少妇| 国产精品久久久久久久影院 | 自由 日本语 热 亚洲人| 国产老妇伦国产熟女老妇视频| 你再躲一个试试BY深巷无酒| 性VIDEOS欧美熟妇HDX| CSGO内射最强对手| 黑森林精选AV导航| 日本成熟人妻HD| 亚洲熟妇久久国内精品| 粉嫩AV一区二区夜夜嗨| 老狼一区忘忧草欢迎您大豆| 亭亭玉立国色天香四月天| 最新在线精品国产福利| 国产新婚夫妇叫床声不断| 清一区二区国产好的精华液| 亚洲精品无码永久在线观看男男 | 男j插女p无遮挡100%| 性色A∨亚洲一区二区三区| HD专干中国老太婆| 精品久久久99大香线蕉| 色爱无码AⅤ综合区| 岳今晚让我玩个够肥水一体探岳体 | 男人边吃奶边揉好爽免费视频| 亚洲AV日韩AV无码AV一区二| 凹凸在线无码免费视频| 久久WWW免费人成一看片| 熟妇人妻AV中文字幕老熟妇| 中文字幕一区日韩精品| 国产老熟女精品一区熟女AV| 欧美熟妇另类久久久久久多毛 | 把腿张开老子cao烂你动态图| 久久国产情侣露脸精品| 四虎成人精品无码| 97SE亚洲国产综合自在线尤物 | 手机国产乱子伦精品视频| 12一14性XXXXX国产| 好男人官网在线观看免费播放 | 久久久久九九精品影院| 乌克兰性猛交ⅩXXX乱大交| AV狠狠色丁香婷婷综合久久| 精品多毛少妇人妻AV免费久久| 色欲人妻综合AAAAAAAA网| 中文人妻无码一区二区三区信息| 国产婷婷内射精品1区| 人人妻人人妻人人片色AV| 一本久道综合在线中文无码| 国产蜜桃AV秘 区一区二区三区| 人妻被修空调在夫面侵犯| 亚洲综合无码AV一区二区三区| 国产精品宾馆在线精品酒店| 欧美熟妇激情一区二区三区| 亚洲无人区码一码二码三码的特点| 国产成人一区二区三区免费视频| 欧美大屁股XXXⅩOOOO| 亚洲情综合五月天| 国产高清在线a视频大全| 欧美人与禽XOXO牲伦交| 亚洲永久精品wW4791一区| 国产精品无码综合区| 日本成熟人妻HD| 中文字幕精品无码一区二区三区| 黑人巨大猛烈捣出白浆视频在线| 少妇爆乳无码AV专区网站寝取| 94久久国产乱子伦精品免费| 精品亚洲国产成人| 无码人妻久久一区二区三区免费丨| А√最新版在线天堂| 巨爆乳无码视频在线观看| 亚洲AV无码成人黄网站在线观看| 动漫成人无码精品一区二区三区| 年轻漂亮的人妻被公侵犯BD免费版 | 日产无人区一线二线三线最新版| 中文字幕四区五区六区蜜桃| 精品第一国产综合精品AⅤ| 忘忧草WWW中文在线资源| 八戒八戒神马影院在线观看| 麻豆E奶女教师国产精品| 亚洲国产成人极品综合| 国产成人无码A区在线| 人妻熟妇乱又伦精品HD| 中文亚洲AV片在线观看不卡| 精品多毛少妇人妻AV免费久久| 无码成人黄动漫在线观看| 宝贝你夹得太紧了我都要断了| 蜜桃传媒一区二区亚洲AV| 亚洲欧美日本韩国| 国产三级多多影院| 少妇┅┅快┅┅用力| M豆传媒有限公司观看| 麻豆果冻精东九一传媒MV| 亚洲精品AⅤ在线观看| 国产精品无码A∨精品影院| 日韩欧无码一区二区三区免费不卡| 91人人妻人人澡人人爽人人精品| 久久久WWW成人免费看片| 亚洲AV无码国产一区二区三区四 | 亚洲欧美另类在线| 国产女主播高潮在线播放| 色妞AV永久一区二区国产AV开| CAOPOREN超碰最新地址| 老师黑色双开真丝旗袍| 亚洲精品无码永久中文字幕| 国产亲子伦ⅩⅩⅩⅩX熟妇视频| 手机看片AV永久免费| 办公室被绑奶头调教羞辱OL| 嫩草在线视频WWW免费看| 一本大道色婷婷在线| 精品人成视频免费国产| 性一交一乱一色一视频| 国产成人久久777777| 日韩精品免费无码专区| CHINESE熟妇与小伙子MA| 门卫老头吮她的花蒂| 亚洲欭美日韩颜射在线| 极品新婚夜少妇真紧| 性欧美丰满熟妇XXXX性久久久| 国产成人69视频午夜福利在线观| 日本三级黄色视频| JAVAPARSER教师HD| 妺妺窝人体色www在线下载人| 一本岛V免费不卡一二三区| 精品久久久久久亚洲精品| 亚洲AV成人无码深夜高潮| 国产精品VIDEOS麻豆| 少妇人妻中文字幕| 成人亚洲色欲色一欲WWW| 人妻AV中文字幕无码专区| 99久久国产热无码精品免费| 免费网站看V片在线18禁无码| 亚洲熟妇色XXXXX无码| 激情久久AV一区AV二区AV三|