欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3插槽(slot)使用方法詳解

 更新時間:2022年11月28日 15:08:02   作者:白瑕  
在VUE開發(fā)項目的過程中,插槽<slot>是重要的承載分發(fā)內(nèi)容的出口,下面這篇文章主要給大家介紹了關(guān)于Vue3插槽(slot)使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言-認(rèn)識slot

我們經(jīng)常會有封裝組件的需求, 組件需要的往往不只有數(shù)據(jù), 有時候我們要給一個模塊做內(nèi)容方面的可自定義, 比如我封裝了一個黑板, 但是我有時希望上面是字, 又有時希望上面是圖畫, 這就要用到插槽了.

感謝你浪費一分鐘生命讀完了這段廢話.

一、簡單插槽

就是普通插槽, 也叫默認(rèn)插槽.

只要你在子組件里寫一個< slot></ slot>就可以從父組件向內(nèi)部填充了.

雖然簡單但是不寫slot也是不能直接從父組件插內(nèi)容的.

子組件:

<template>
  <div class="sy-page">
    <slot></slot>
  </div>
</template>

父組件:

<template>
  <sy-turning>BaiX</sy-turning>
</template>

缺點就是不能規(guī)定父組件填充內(nèi)容所指向的插槽, 父組件內(nèi)填充的所有內(nèi)容, 會填充到每個子組件內(nèi)的插槽中:

子組件:

<template>
  <div class="sy-page">
    <slot></slot>
    <a href=""><slot></slot></a>
  </div>
</template>

父組件:

<template>
  <sy-turning>BaiX</sy-turning>
</template>

要解決這個問題 就需要具名插槽了.

二、具名插槽

特點是帶有name屬性:

<slot name="xxx"></slot>

有時我們會需要在子組件某處寫一堆的插槽,又需要在父組件各處分別使用這些插槽.

某些方面計算機是很笨的,它不會看得出哪個插槽該填什么東西,也不知道你在這里填的東西是要給哪個插槽, 你得告訴她該怎么做.

只要有使用多個插槽的需求, 那就用具名插槽吧.

先來看看子組件:

<!--子組件 -->
  <div class="tab-bar-item">
    <slot name="item-icon"></slot>
    <slot name="item-text"></slot>
  <!-- 插槽slot最終會被父組件里傳入的html元素替換,
  在插槽上寫樣式類的東西不會生效,可以用div來包裹slot,
  利用樣式繼承性來完成樣式修改 -->

父組件
< template>來包裹要向插槽里填充的東西, 在template標(biāo)簽的v-slot屬性后面寫上對應(yīng)插槽的name值.

v-slot:可以簡寫為"#"

<!--父組件 -->
  <tab-bar-item>
  
    <template v-slot:item-icon>
      <div>插槽item-icon內(nèi)容<img src="#" /></div>
    </template>
  
    <template #item-text>
      <div>插槽item-text內(nèi)容</div>
    </template>
    
  </tab-bar-item>

這樣所有在template包裹下的填充內(nèi)容都會被填入對應(yīng)的插槽,但如果沒有被template包裹呢?

那樣就相當(dāng)于寫了個這:

  <template>
  <!--隱含的名字“default”(默認(rèn)) -->
    <p>我會被填入子組件的每個插槽</p>
  </template>

Vue官方文檔: 沒有被包裹在帶有 v-slot: 的 < template> 中的內(nèi)容都會被視為默認(rèn)插槽內(nèi)容.

具名插槽擴展-動態(tài)插槽名

從 2.6.0 開始,可以用方括號括起來的JS表達(dá)式作為一個指令(v-bind啥的)的參數(shù),比如在此例中

//隨便定義一個方法randomName, 使用這個方法的返回值;
<a v-bind:[randomName]="user"> ... </a>

其實這個東西最常見的是在封裝組件時, 我們用computed里的方法返回值來控制:class和:style:

<button
  :class="[theme, isBorder]"
></button>
computed: {
  theme() {
    return this.type ? `sy-button-${this.type}` : "";
  },
  isBorder() {
    return this.border ? "is-border" : "";
  },
}

在2.6版本新增的內(nèi)容中, 這種用法(動態(tài)指令參數(shù))也可以用在具名插槽上定義動態(tài)的插槽名, 這其實是具名插槽的擴展用法, 你可以先看看具名插槽.

<base-layout>
  <template v-slot:[動態(tài)指令參數(shù)]>
    動態(tài)決定插入哪個插槽
  </template>
</base-layout>

三、作用域插槽

父組件內(nèi)需要訪問子組件中的數(shù)據(jù)以正常工作, 可以作用域插槽.

作用域插槽的渲染是在子組件完成, 所以我們也需要子組件的數(shù)據(jù).

在子組件的slot上利用v-bind / v-for之類綁定上父組件需要的各種數(shù)據(jù), 渲染時就可以從子組件拿數(shù)據(jù)來渲染.

綁定在 < slot> 上的屬性被Vue官方稱為"slotProps"(這并不重要);

子組件:

<span class="current-user">
  <slot :user="data.user"></slot>
</span>

<!-- 或者 -->
<span v-for="item in data.someThing" :key="item">
  <slot :num="item.num" :awsl="item.id"></slot>
</span>

在父組件內(nèi)使用v-slot屬性接收子組件數(shù)據(jù);

父組件

<current-user>
  <template v-slot="{ user, name }">
  <!--其實這里寫的參數(shù)是什么真的無所謂, 比如我子組件傳出item,
   父組件要接收item.id, 寫v-slot="awsl.id"接收也可以-->
  </template>
</current-user>
<!--或者 -->
<current-user>
  <template v-slot="num"> <!-- 只傳一個時不要加大括號. -->
  </template>
</current-user>

作用域插槽會被解析為一個傳入了slotProps作參的函數(shù):

function (slotProps) {
  // 插槽內(nèi)容
}

所以, 父組件中v-slot: 的值實際上可以是任何 [能作為函數(shù)的參數(shù)來傳入] 的東西;

作用域插槽實例

我現(xiàn)在二次封裝一個el-tabs, 實現(xiàn)傳入數(shù)據(jù)數(shù)組自動生成:

子組件:

<div class="sy_tabs">
  <el-tabs>
    <el-tab-pane
      v-for="item in sy_tab_data"
      :key="item"
      :label="item.label"
      :name="item.name"
    >
      <slot :item="item"></slot>  <!--然后我們直接在這里吧item傳出去,傳作"item"
    </el-tab-pane>
  </el-tabs>
</div>
//我想了一下還是不要用props接收了, 我們直接把標(biāo)簽頁數(shù)據(jù)寫死吧...
export default {
  setup() {
    const sy_tab_data =  [
        { label: "推薦", name: "first", id: 0 },
        { label: "熱門", name: "second", id: 1 },
        { label: "關(guān)注", name: "third", id: 2 },
      ],
  }
}

這樣我們有三個標(biāo)簽頁了:

父組件:

為了根據(jù)不同標(biāo)簽頁顯示不同的內(nèi)容, 這里我們要拿到tab標(biāo)簽頁的id, 來決定 “在id為幾的標(biāo)簽頁顯示article_content的哪個子數(shù)組”

<sy-tabs>
  <template v-slot="slotProps">
  <!--然后你可以看到, 我們在這里用slotProps來接收item,
    沒有任何問題, 也能拿到里面的id屬性(見下); -->
    <ul>
      <li
        v-for="i in data.article_content[slotProps.item.id]"
        :key="i"
       >
       <!--這樣把article_content的序號和tab的序號對應(yīng)起來, 
         實現(xiàn)第2頁顯示第2個數(shù)組, 第3頁顯示第3個數(shù)組 -->
      </li>
    </ul>
  </template>
</sy-tabs>
let data = reactive({
  article_content: [
    [xxx, xxx], //詳細(xì)數(shù)據(jù)略
    [xxx, xxx],
    [xxx, xxx],
  ]
})

就可以正常呈現(xiàn)了:

總結(jié)

注意 v-slot 只能添加在 < template> 上, 不然會標(biāo)紅;

我為什么要把這些玩意兒寫在插槽里, 這么麻煩為什么不直接寫那些標(biāo)簽?
是,我一開始也在問我自己, 為什么不直接寫標(biāo)簽而要寫插槽.

(現(xiàn)在是22年4月22, 我剛做完我的個人網(wǎng)站, 回來說一句, 不封裝實在是——太亂了代碼很多,就算復(fù)制粘貼下來到別處還要改屬性改參數(shù)改樣式,主要是還要改樣式,老天!做了三個頁面我就開始封裝了。)

到此這篇關(guān)于Vue3插槽(slot)使用方法的文章就介紹到這了,更多相關(guān)Vue3插槽使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標(biāo)記、彈窗顯示定位詳情(完整實例)

    vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標(biāo)記、彈窗顯示定位詳情(完整實例)

    這篇文章主要介紹了vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標(biāo)記、彈窗顯示定位詳情,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Vue3中watch的用法與最佳實踐指南

    Vue3中watch的用法與最佳實踐指南

    這篇文章主要給大家介紹了關(guān)于Vue3中watch用法與最佳實踐的相關(guān)資料,watch的作用可以監(jiān)控一個值的變換,并調(diào)用因為變化需要執(zhí)行的方法,可以通過watch動態(tài)改變關(guān)聯(lián)的狀態(tài),需要的朋友可以參考下
    2021-07-07
  • vue項目開發(fā)環(huán)境工具node搭建過程

    vue項目開發(fā)環(huán)境工具node搭建過程

    最近在開始接觸做vue框架的前端項目,以前用的前端比如html,js,css等都是比較原生的,寫好后直接瀏覽器打開就行,今天就先記錄一下vue的開發(fā)運行搭建過程,感興趣的朋友一起看看吧
    2023-09-09
  • Vue中進(jìn)行路由懶加載的示例詳解

    Vue中進(jìn)行路由懶加載的示例詳解

    路由懶加載是一種優(yōu)化Vue應(yīng)用程序性能的技術(shù),本文介紹了Vue中如何進(jìn)行路由懶加載,包括使用Vue異步組件和Webpack代碼分割,需要的朋友可以參考下
    2023-06-06
  • 淺談vue單頁面中有多個echarts圖表時的公用代碼寫法

    淺談vue單頁面中有多個echarts圖表時的公用代碼寫法

    這篇文章主要介紹了淺談vue單頁面中有多個echarts圖表時的公用代碼寫法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 實現(xiàn)vuex與組件data之間的數(shù)據(jù)同步更新方式

    實現(xiàn)vuex與組件data之間的數(shù)據(jù)同步更新方式

    今天小編就為大家分享一篇實現(xiàn)vuex與組件data之間的數(shù)據(jù)同步更新方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue中datepicker的使用教程實例代碼詳解

    vue中datepicker的使用教程實例代碼詳解

    這篇文章主要介紹了vue-datepicker的使用,本文通過實例代碼大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Vue中mixins混入的介紹與使用詳解

    Vue中mixins混入的介紹與使用詳解

    如果我們在每個組件中去重復(fù)定義這些屬性和方法會使得項目出現(xiàn)代碼冗余并提高了維護(hù)難度,針對這種情況官方提供了Mixins特性,這時使用Vue mixins混入有很大好處,下面就介紹下Vue mixins混入使用方法,需要的朋友參考下吧
    2022-12-12
  • vite build vue3項目配置開啟sourcemap方式

    vite build vue3項目配置開啟sourcemap方式

    這篇文章主要介紹了vite build vue3項目配置開啟sourcemap方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue實現(xiàn)列表滾動的過渡動畫

    vue實現(xiàn)列表滾動的過渡動畫

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)列表滾動的過渡動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評論