91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中的插槽是什么及怎么用

發布時間:2022-05-11 11:58:50 來源:億速云 閱讀:402 作者:iii 欄目:編程語言

這篇文章主要介紹了Vue中的插槽是什么及怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Vue中的插槽是什么及怎么用文章都會有所收獲,下面我們一起來看看吧。

Vue中的插槽是什么及怎么用

在 Vue 中,插槽是個很強大的功能,它可以使封裝的組件靈活性增強很多,比如你在封裝一個組件時使用了插槽,那在父組件調用時,這里的內容就可以由父組件自由定義,而無需在封裝組件時苦想如何覆蓋各種使用場景。

基礎插槽

假設我們現在有一個需要封裝的組件 SlotComponent

<template>
  <div>這是一個slot:<slot> </slot></div>
</template>
<SlotComponent>來自父組件的內容</SlotComponent>

slot 中的內容就可以在父組件中任意定義。要是組件中沒有<slot>元素,那么在父組件調用時,組件起始和結束標簽之間的內容就都會丟失掉。

既然 slot 是在 SlotComponent組件中的,那在父組件中調用的時候能否能使用 SlotComponent 組件里的數據呢 ? 顯然是不能的,因為他們所處的作用域并不相同。

父級模板里的所有內容都是在父級作用域中編譯的;子模板里的所有內容都是在子作用域中編譯的。

插槽的默認內容

插槽也可以設置默認的內容,這有點像 es6 中函數參數的默認值,當父組件調用時并沒有提供內容,那么這個默認值就會被渲染出來。提供了內容的話,則會替代默認內容。

<template>
  <div>
    <slot>這是slot的默認內容</slot>
  </div>
</template>
<DefaultSlot></DefaultSlot>

在調用時標簽之間并沒有提供內容,默認值得以渲染,成為一個兜底內容。

具名插槽

如果在組件中我需要多個地方用到插槽,那就需要給 slot 添加 name,來區分內容渲染到什么地方。

// named slot,名字叫 NamedSlot
<template>
  <div>
    這是具名插槽
    <div>
      <slot name="slot1"></slot>
    </div>
    <div>
      <slot name="slot2"></slot>
    </div>
    <div>
      <slot name="slot3"></slot>
    </div>
  </div>
</template>

// 在父組件中調用
<NamedSlot>
    <template v-slot:slot1>這是插入slot1的內容</template>
    <template v-slot:slot2>這是插入slot2的內容</template>
    <template v-slot:slot3>這是插入slot3的內容</template>
</NamedSlot>

slot 加上 name 屬性后,可以通過 v-slot:slotName的形式分發內容。不給 name 屬性的話,就默認namedefault,等同于 v-slot:default,也可以縮寫為#default

注意, v-slot 只能添加在 <template> ,但是也有特殊情況,后面會講到。

插槽如何訪問子組件內容

通過 slot,我們可以在父組件為子組件添加內容,但是父子組件的作用域是不同的,我們想在父組件使用子組件的數據該怎么辦呢?

可以在子組件 <slot> 元素上綁定屬性,值為你需要傳遞給父組件的內容。

// 子組件 組件名稱為 SlotProp
<div>
    <slot name="slot1" :value1="child1"></slot>
    <slot name="slot2" :value2="child2"></slot>
</div>
//調用
<SlotProp>
  <template v-slot:slot1="slotProps">
    {{ slotProps.value1 }}
  </template>
  <template v-slot:slot2="slotProps">
    {{ slotProps.value2 }}
  </template>
</SlotProp>

簡單來說,就是在 slot 上通過 :key='value'的形式綁定一個值,

在父組件調用時,通過v-slot:slotName="slotProps"的形式拿到這個值,slotProps名稱可以自己定義,

再通過 slotProps[key] 去拿到這個值。

如果組件只有一個默認模版的話,是可以不用在 template 上寫 v-slot:slotName="slotProps"的,可以直接在組件名稱上寫 v-slot

<SlotProp v-slot:default="slotProps">
    {{ slotProps.value1 }}
</SlotProp>

上面提到過,未指定 name 就會被認為是 default ,這里也是同理,v-slot:default="slotProps"可以簡寫成 v-slot="slotProps"

slotProps 的解構

作用域插槽的內部工作原理是將你的插槽內容包括在一個傳入單個參數的函數里

基于插槽的實現原理,我們也可以使用一些 ES6 的語法來操作 slotProps,比如解構prop重命名賦默認值等。

// 解構
<SlotProp v-slot="{ value1 }">
    {{ value1 }}
</SlotProp>

// 重命名,將 value1 重命名為 name1
<SlotProp v-slot="{ value1: name1 }">
    {{ name1 }}
</SlotProp>

// 賦默認值
<SlotProp v-slot="{ value1 = '這是默認值' }">
    {{ value1 }}
</SlotProp>

動態插槽名

slot 支持通過 <template v-slot:[dynamicSlotName]>這樣的方式來實現動態插槽。

有時在一個基礎組件中循環了插入了多個 slot ,比如這樣

<div v-for="item in slotList" :key="item">
      <slot :name="item"></slot>
</div>

在調用的時候就可以使用動態插槽名 + 循環來動態渲染相應的 slot

<template
  v-for="item in slotList"
  v-slot:[item]
>
    {{item}}
</template>

關于“Vue中的插槽是什么及怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Vue中的插槽是什么及怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

沂源县| 井陉县| 东城区| 金乡县| 兴业县| 都昌县| 昆山市| 营口市| 临洮县| 汤阴县| 巴彦淖尔市| 大兴区| 揭阳市| 苏州市| 黎平县| 麻城市| 四川省| 云龙县| 安西县| 扎赉特旗| 吉隆县| 库车县| 湘潭县| 玛多县| 承德县| 公主岭市| 高邮市| 淮南市| 金华市| 庐江县| 定襄县| 天津市| 台山市| 启东市| 盐山县| 凤冈县| 汤原县| 安康市| 松原市| 华池县| 原平市|