92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

Vue2 插槽的使用【默認插槽、具名插槽、作用域插槽】

2023-1-12    前端達人

一:什么是插槽

       例如老板要讓你使用組件寫分類欄,然后使用該組件生成兩個分類欄,這兩個分類欄里的數據都不一樣,但是整體結構是一樣的,這就要求組件的結構一樣,但是內部 DOM 結構是由使用組件的時候決定的,這就需要插槽,其就像放在組件中的占位標簽,使用組件時我們將要放到占位標簽處的DOM結構寫入組件標簽體中即可。

       例如如下圖例子,第一個分類框我們要展示熱門電影,第二個分類框我們要展示一張風景圖,整體的框架是一樣的,只是其內部填充的東西不一樣下面會做出更深刻的理解。


二:默認插槽 

2.1 默認插槽說明

      此板塊我們講述第一個插槽:默認插槽。之前我們使用組件的時候,引入進 App.vue 后注冊就可以采用 自閉合 與  完整組件標簽 的方式使用,以下就是常采用的自閉合與完整組件標簽方式(以 test組件為例)


    
  1. <template>
  2. <test/> //自閉合方式
  3. <test></test> //完整組件標簽的方式
  4. </template>

         但是插槽的使用我們就要把要放在插槽中的內容寫在組件標簽體內,例如我們要在插槽中放入一個 ul 列表,那么我們使用組件時就要這樣書寫:


    
  1. <template>
  2. <test> //組件標簽
  3. <ul>
  4. <li></li>
  5. <li></li>
  6. <li></li>
  7. </ul>
  8. </test>
  9. </template>

       接下來說說默認插槽的寫法,如果我們只在使用組件時的組件標簽體內寫上內容,那頁面上是顯示不出來任何東西的,這是因為標簽體內的內容確實被解析了,但是vue不知道要把這些東西放在組件中 template 的哪個位置,故我們要在組件的 template 中設置一個插槽來占位,以保證使用組件時其解析的內容可以放入占的位置中去。占位我們使用一個很重要的標簽 ------ slot,我們需要在組件的 template 中這樣書寫:


    
  1. <template>
  2. <div>
  3. <span>我是一個組件,下面是我的插槽內容</span>
  4. <slot></slot> //默認插槽
  5. </div>
  6. </template>

這樣使用組件時組件標簽體中的內容就可以放入組件的默認插槽中了

2.2 默認插槽使用 

       我們來實現一下上述的分類案例,讓第一個分類展示電影,第二個分類放一張圖片進去,但整體組件結構一樣

 classify.vue組件:


  1. <template>
  2. <div class="classify-box">
  3. <div class="title">{{name}}</div>
  4. <slot></slot> //slot設置默認插槽來占位
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name:'Classify',
  10. data() {
  11. return {
  12. }
  13. },
  14. props:['name'] //propos接收傳來的標題名稱
  15. }
  16. </script>
  17. <style scoped>
  18. //css太占地方就刪掉了
  19. </style>

App.vue組件:


  1. <template>
  2. <div class="app-box">
  3. <Classify name='熱門電影'> //使用組件并在組件標簽體中書寫要放進插槽中的內容
  4. <ul>
  5. <li>肖申克的救贖</li>
  6. <li>1912</li>
  7. <li>零的執行人</li>
  8. </ul>
  9. </Classify>
  10. <Classify name="風景">
  11. <img src="./img/QQ圖片20220818163031.jpg" alt="">
  12. </Classify>
  13. </div>
  14. </template>
  15. <script>
  16. import Classify from './components/classify.vue' //引入組件
  17. export default {
  18. name: 'App',
  19. data() {
  20. return {
  21. }
  22. },
  23. components: {
  24. Classify:Classify //注冊組件
  25. }
  26. }
  27. </script>
  28. <style scoped>
  29. //css太占位置刪掉了
  30. </style>

這樣就可以實現一個最基本的默認插槽案例了 


三:具名插槽 

3.1 具名插槽說明

       具名插槽其實只是在默認插槽的基礎上給每個插槽起了名字,作用為可以在組件中設置多個插槽,可以更具體細分。首先給組件插槽起名字,使用 name="xxx"


    
  1. <template>
  2. <div>
  3. <span>我是一個組件,下面是我的多個具名插槽內容</span>
  4. <slot name="header"></slot> //header具名插槽
  5. <slot name="body"></slot> //body具名插槽
  6. <slot name="footer"></slot> //footer具名插槽
  7. </div>
  8. </template>

        上面就在組件中定義好了三個具名插槽,下面我們來看使用插槽的寫法,依舊是在使用組件標簽時在標簽體內寫入內容,但是要注意要使用 slot="xxx" 寫在組件標簽體外層盒子上來指明放入哪個插槽中


    
  1. <template>
  2. <div class="app-box">
  3. <Classify>
  4. <div slot="header"> //放入header插槽
  5. <span>我在header插槽中</span>
  6. </div>
  7. <div slot="body"> //放入body插槽
  8. <span>我在body插槽中</span>
  9. </div>
  10. <div slot="footer"> //放入footer插槽
  11. <span>我在footer插槽中</span>
  12. </div>
  13. </Classify>
  14. </div>
  15. </template>

       上面的寫法其實并不完善,slot寫在每個指定插槽的外層大盒子 div 上了,這樣會給其增加一層 DOM 結構,我們最好把 div 換成 template 標簽,因為 template 標簽不會被解析,結構更清晰不多余。

3.2 具名插槽使用

下面簡單實現一下具名插槽的使用

 classify.vue組件:


  1. <template>
  2. <div class="classify-box">
  3. <div class="title">下面是具名插槽的內容</div>
  4. <slot name="header"></slot>
  5. <slot name="body"></slot>
  6. <slot name="footer"></slot>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. name:'Classify',
  12. data() {
  13. return {
  14. }
  15. },
  16. }
  17. </script>
  18. <style scoped>
  19. </style>

App.vue組件:


  1. <template>
  2. <div class="app-box">
  3. <Classify>
  4. <div slot="header">
  5. <span>我在header插槽中</span>
  6. </div>
  7. <div slot="body">
  8. <span>我在body插槽中</span>
  9. </div>
  10. <div slot="footer">
  11. <span>我在footer插槽中</span>
  12. </div>
  13. </Classify>
  14. </div>
  15. </template>
  16. <script>
  17. import Classify from './components/classify.vue'
  18. export default {
  19. name: 'App',
  20. data() {
  21. return {
  22. }
  23. },
  24. components: {
  25. Classify:Classify
  26. }
  27. }
  28. </script>
  29. <style scoped>
  30. </style>

這樣就簡單實現了具名插槽 


四:作用域插槽 

4.1 作用域插槽說明

       作用域插槽較難理解,但其簡單解釋就是帶有數據的插槽,把組件中的數據綁定給插槽,然后誰使用這個組件誰就能拿到這個數據使用,也相當于一種數據通信,其需要這樣把數據綁定定義給組件插槽(名稱沒有要求)


    
  1. <template>
  2. <div class="classify-box">
  3. <div class="title">下面是作用域插槽的內容</div>
  4. <slot :hobby="hobby"></slot> //將數據綁定給組件插槽
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name:'Classify',
  10. data() {
  11. return {
  12. hobby:['打游戲','睡大覺','吃大餐'] //要綁定的數據
  13. }
  14. },
  15. }
  16. </script>

然后就要使用組件時使用 slot-scope="xxx" 去接收,或者直接使用 scope,要注意的是此處標準一點最好寫在 template 中,這里的 xxx 不需要和組件插槽中起的名字一樣,隨便起就行。然后我們打印一下接收到的數據看看其是什么


    
  1. <template>
  2. <div class="app-box">
  3. <Classify>
  4. <template slot-scope="datas">
  5. <div>{{datas}}</div>
  6. </template>
  7. </Classify>
  8. </div>
  9. </template>

       可以看到我們接受到了一個對象,對象中包含的是你插槽中綁定的所有數據(我們只綁定了一個所以對象里只有一組數據),對此我們就能在組件標簽體中使用得到的數據了

 

4.2 作用域插槽使用

下面簡單實現一下作用域插槽的使用

 classify.vue組件:


  1. <template>
  2. <div class="classify-box">
  3. <div class="title">下面是作用域插槽的內容</div>
  4. <slot :hobby="hobby"></slot>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name:'Classify',
  10. data() {
  11. return {
  12. hobby:['打游戲','睡大覺','吃大餐']
  13. }
  14. },
  15. }
  16. </script>
  17. <style scoped>
  18. </style>

App.vue組件:

此處 slot-scope 接收的數據使用了es6解構把數據解構出來了


  1. <template>
  2. <div class="app-box">
  3. <Classify>
  4. <template slot-scope="{hobby}">
  5. <ul>
  6. <li v-for="(h,index) in hobby" :key="index">{{h}}</li>
  7. </ul>
  8. </template>
  9. </Classify>
  10. </div>
  11. </template>
  12. <script>
  13. import Classify from './components/classify.vue'
  14. export default {
  15. name: 'App',
  16. data() {
  17. return {
  18. }
  19. },
  20. components: {
  21. Classify:Classify
  22. }
  23. }
  24. </script>
  25. <style scoped>
  26. </style>

這樣就簡單實現了作用域插槽的案例

 感謝支持'


 來源:csdn

藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
樱花影视一区二区| 蜜臀av性久久久久蜜臀av麻豆| 欧美精品中文字幕亚洲专区| 在线一区二区三区四区| 欧美日韩在线免费| 福利一区三区| 99精品国自产在线| 国产精品国产自产拍高清av| 国产精品亚洲综合在线观看| 欧美大片1688网站| 欧美与黑人午夜性猛交久久久| 日韩中文字幕无砖| 国产美女精品视频免费观看| 亚洲一区二区免费在线观看| 欧美福利视频在线| 色8久久精品久久久久久蜜| 一区二区在线观看免费视频播放| av亚洲精华国产精华精华| 欧美日韩在线一区二区| 亚洲激情综合网| 在线一区二区三区视频| 3p在线观看| 奇米影视777在线欧美电影观看| 久久av网站| 久久精品视频免费播放| 不卡一区二区三区四区| 美女精品一区最新中文字幕一区二区三区| 亚洲女同志freevdieo| 妖精视频一区二区三区免费观看| 欧美日韩国产小视频| 在线欧美小视频| 一本到高清视频免费精品| 久久中文字幕视频| 欧美激情国内偷拍| 日韩激情一区| 欧美福利精品| 嗯~啊~轻一点视频日本在线观看| 亚洲欧美日韩一区二区三区在线| 亚洲午夜久久久| 97视频在线观看网址| 国产成人精品日本亚洲专区61| 亚洲免费在线播放| 亚洲人被黑人高潮完整版| 久久国产精品久久久| 亚洲精品视频网上网址在线观看| 天天操夜夜操国产精品| 成人在线免费av| 成人午夜又粗又硬又大| a级影片在线| 久久99国产精品免费| 色综合导航网站| 日日夜夜精品一区| 久久精品国产第一区二区三区最新章节| 欧美日韩国产页| 九义人在线观看完整免费版电视剧| 7m精品福利视频导航| 亚洲欧洲日韩女同| 午夜国产欧美理论在线播放| 蜜桃传媒麻豆第一区在线观看| 理论电影国产精品| 欧美日韩电影在线播放| 午夜精品久久久| 亚洲精品一二| 老司机精品视频在线观看6| 久久精品国产欧美亚洲人人爽| 国产精品高潮呻吟久久| 日本动漫理论片在线观看网站| 午夜精品一区二区三区在线| 欧美日本中文| 91精品国产91久久久久久青草| 久久高清视频免费| 国产精品一区二区三区视频网站| 色喇叭免费久久综合| 亚洲欧美另类久久久精品| 欧美日韩午夜影院| 97成人资源| 狠狠色狠色综合曰曰| 日韩精品一页| 欧美日韩一区二区不卡| 欧美日韩一区二区在线视频| 亚洲一区二区国产| 欧美精品video| 五月激情综合网| 欧美小视频在线观看| 欧美日韩亚洲综合在线| 精品成人自拍视频| 亚洲人成在线一二| 快播日韩欧美| 免费国产一区二区| 欧美日韩123| 免费不卡中文字幕在线| 欧美一卡2卡3卡4卡无卡免费观看水多多| 亚洲午夜国产成人av电影男同| 亚洲丝袜另类动漫二区| 国产精品久久久乱弄| 亚洲国产精品久久人人爱| 久久国产麻豆精品| 成人免费网站在线| 一区二区三区天堂av| 91成人在线视频| 国产精品免费在线免费| 一本色道久久综合狠狠躁篇的优点| 欧美亚洲视频| 国产91色在线|免| 欧美日韩免费观看一区二区三区| 一区二区在线影院| 成人天堂噜噜噜| 亚洲片国产一区一级在线观看| 国产精品卡一卡二| 日本高清视频在线播放| 国产一二区在线观看| 色素色在线综合| 欧洲亚洲精品在线| 成人中文字幕电影| 国产精品成久久久久| 欧美日韩亚洲一区二区三区| 欧美亚洲日本精品| 国产精品二区在线| 亚洲最新av网址| 亚洲美女视频| 在线一区二区三区四区| 精品在线网站观看| 色婷婷热久久| 亚洲va欧美va人人爽| 91大神在线播放精品| 欧美国产一二三区| 18网站在线观看| 蜜臀av一区二区| 伊人久久综合影院| 久久中文字幕二区| 婷婷久久综合九色综合伊人色| 麻豆一区在线| 中文字幕亚洲字幕| 色欧美片视频在线观看| 在线播放亚洲一区| 中文字幕在线视频一区| 国产成人综合在线观看| 在线视频精品| 久久久精品区| 国产最新精品视频| 不卡亚洲精品| av女优在线| 欧美激情成人动漫| 懂色av噜噜一区二区三区av| 欧美不卡视频一区发布| 亚洲成人性视频| 东京久久高清| 亚洲男人的天堂在线观看| 亚洲高清免费| 欧美色男人天堂| 久久久久无码国产精品一区| 自拍欧美日韩| 7878成人国产在线观看| 视频一区视频二区国产精品| √天堂8资源中文在线| 久久99国产精品二区高清软件| 成人久久18免费网站麻豆| 亚洲女同女同女同女同女同69| 久久综合给合久久狠狠色| 亚洲国产91视频| 男人在线资源站| 免费成人在线视频观看| 亚洲久久久久| 国产精品一区三区在线观看|