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一区二区
欧美成人精品欧美一级乱| 四虎免费在线观看视频| 日本a在线天堂| 99999精品| 一区二区三区四区毛片| 一区二区三区入口| 久久精品影视大全| 潘金莲激情呻吟欲求不满视频| 九九视频精品在线观看| 国产精品入口免费软件| 91制片厂毛片| 欧美 另类 交| 日本精品福利视频| 欧美精品自拍视频| 精品久久久久av| jizz欧美性11| 欧洲xxxxx| 欧美日韩不卡在线视频| 少妇av一区二区三区无码| 国产又大又硬又粗| 亚洲综合婷婷久久| 欧洲金发美女大战黑人| 久久国产成人精品国产成人亚洲| 成人黄色一区二区| 国产女同无遮挡互慰高潮91| 天堂av免费看| av片中文字幕| 午夜啪啪福利视频| 91看片就是不一样| 国内自拍第二页| 日本午夜激情视频| 无需播放器的av| 国产乱人伦精品一区二区三区| 亚洲 欧美 日韩 国产综合 在线| 可以在线看的黄色网址| 午夜激情视频网| 精品国产免费av| 亚洲最新免费视频| 无码内射中文字幕岛国片| 日本一级淫片演员| 99视频精品免费| 九色自拍视频在线观看| 欧美丝袜在线观看| 免费在线观看毛片网站| 好吊色视频988gao在线观看| 国产精品视频黄色| 国产免费毛卡片| 免费人成在线观看视频播放| www.亚洲高清| 免费无码av片在线观看| 日本阿v视频在线观看| 精品亚洲视频在线| 男操女免费网站| 美女网站免费观看视频| 你真棒插曲来救救我在线观看| 午夜激情视频网| 中文字幕剧情在线观看| 国产原创精品在线| 亚洲免费看av| 牛夜精品久久久久久久| 日韩手机在线观看视频| 国产主播在线看| 欧美女人性生活视频| 欧美亚洲国产成人| 免费av观看网址| 91精品91久久久中77777老牛| 成人av在线不卡| 999一区二区三区| 国产日韩欧美精品在线观看| 日本黄网站色大片免费观看| 草草草视频在线观看| 免费国产成人看片在线| 久久综合亚洲精品| 国产传媒久久久| 国产一区二区网| 欧美a在线视频| 激情视频综合网| 不卡的在线视频| 午夜国产福利在线观看| 国产成人精品免费看在线播放| 性鲍视频在线观看| 国内自拍中文字幕| 成人免费观看cn| 国产日韩成人内射视频 | 国产日韩av网站| 僵尸世界大战2 在线播放| 日韩在线视频在线观看| 天天操天天爽天天射| 亚洲高清在线不卡| 无颜之月在线看| 毛片一区二区三区四区| 三级一区二区三区| 日韩一级免费看| 美女一区二区三区视频| 裸体裸乳免费看| 精品免费国产一区二区| 亚洲天堂一区二区在线观看| 97干在线视频| 中文字幕永久有效| 性欧美大战久久久久久久| 鲁一鲁一鲁一鲁一av| 欧洲精品在线播放| 超碰超碰在线观看| 国产69精品久久久久999小说| 在线观看免费黄网站| 男的插女的下面视频| 看看黄色一级片| 99热在线这里只有精品| 久久综合在线观看| 午夜激情福利在线| 欧美深夜福利视频| 国产午夜精品视频一区二区三区| 情侣黄网站免费看| 国产人妻777人伦精品hd| 日韩精品aaa| 乌克兰美女av| 北条麻妃在线观看| 免费超爽大片黄| 少妇一晚三次一区二区三区| 日韩欧美理论片| 爱爱爱爱免费视频| 国产精品无码av无码| 人妻久久久一区二区三区| 水蜜桃在线免费观看| 国产欧美激情视频| 亚洲天堂av线| 五月婷婷丁香综合网| 精品久久久久久久无码| 日韩手机在线观看视频| 红桃av在线播放| 国产l精品国产亚洲区久久| 草b视频在线观看| 免费看毛片的网址| 全黄性性激高免费视频| bt天堂新版中文在线地址| 久久这里只有精品8| 日韩一级片免费视频| 日韩精品在线中文字幕| 久久99久久久久久| 少妇高潮喷水在线观看| 男人日女人下面视频| 看av免费毛片手机播放| 日韩欧美精品在线观看视频| 国产免费一区二区三区视频| 日本老熟妇毛茸茸| 久久人人爽av| 日本丰满少妇黄大片在线观看| 六月婷婷激情网| 日本福利视频一区| 日韩一级在线免费观看| 国产福利在线免费| 亚洲小说欧美另类激情| 欧美成人免费在线观看视频| 国内自拍视频网| 性生活免费观看视频| 3d动漫一区二区三区| 最新中文字幕2018| 日韩中文字幕在线不卡| www.99热这里只有精品| 日日躁夜夜躁aaaabbbb| 最新视频 - x88av| 免费看日本毛片| 91小视频在线播放| 欧美 日韩 国产 高清| 免费看涩涩视频| 99久久99久久精品| 欧美激情国产精品日韩| 99re99热| 日韩手机在线观看视频| 日本高清免费观看| 免费高清在线观看免费| 国内av免费观看| 日本在线视频www| 手机福利在线视频| 国产视频在线视频| 亚洲色成人www永久在线观看| 国内外成人免费在线视频| 男人添女荫道口喷水视频| 超碰人人草人人| 欧美黄色一级片视频| 波多野结衣av一区二区全免费观看| 国产又大又黄又粗的视频| 嫩草影院中文字幕| 91av视频免费观看| 成年人小视频网站| 无码人妻精品一区二区三区在线| av电影一区二区三区| 天堂中文av在线| 在线观看的毛片| 麻豆传传媒久久久爱| 草草久久久无码国产专区| 真实国产乱子伦对白视频| 在线一区二区不卡| 天堂av在线网站| 亚洲少妇久久久| 亚洲综合av在线播放| 手机版av在线| 久久艹这里只有精品| 992kp免费看片| 日本道在线视频|