溫馨提示×

溫馨提示×

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

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

vue如何有條件地渲染slot

發(fā)布時間:2022-03-16 14:46:41 來源:億速云 閱讀:912 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“vue如何有條件地渲染slot”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“vue如何有條件地渲染slot”這篇文章吧。

有條件地渲染slot

每個 Vue 組件都有一個特殊的 $slots 對象,其中包含所有slot。 默認(rèn)slot具有默認(rèn)鍵,名字命名的slot都使用它們的名稱作為鍵:

const $slots = {
  default: <default slot>,
  icon: <icon slot>,
  button: <button slot>,
};

但是這個$slots對象只有應(yīng)用于組件的slot,而不是每個定義的slot。

以這個定義了幾個slot的組件為例,包括幾個命名的slot:

<!-- Slots.vue -->
<template>
  <div>
    <h3>這里是一些slots</h3>
    <slot />
    <slot name="second" />
    <slot name="third" />
  </div>
</template>

如果我們只對組件應(yīng)用一個slot,則只有該slot會出現(xiàn)在我們的$slots對象中:

<template>
  <Slots>
    <template #second>
      這將應(yīng)用于第二個slot
    </template>
  </Slots>
</template>

$slots = { second: <vnode> }

我們可以在我們的組件中使用它來檢測哪些slot已應(yīng)用于組件,

例如:通過隱藏slot的包裝元素:\

<template>
  <div>
    <h3>一個包裹的slot</h3>
    <div v-if="$slots.default" class="styles">
      <slot />
    </div>
  </div>
</template>

現(xiàn)在div,應(yīng)用樣式的包裝器只有在我們實際用某些東西填充該slot時才會呈現(xiàn)。

如果我們不使用v-if,div如果我們沒有slot,我們最終會得到一個空的和不必要的。根據(jù)所div具有的樣式,這可能會弄亂我們的布局并使事情看起來很奇怪。

1 為什么我們希望能夠有條件地渲染slot呢?

使用條件slot主要有以下三個原因:

  • 使用 wrapper div 來添加默認(rèn)樣式時

  • slot是空的

  • 當(dāng)我們將默認(rèn)內(nèi)容與嵌套slot組合

例如,當(dāng)我們添加默認(rèn)樣式時,我們會在slot周圍添加一個div:

<template>
  <div>
    <h3>This is a pretty great component, amirite?</h3>
    <div class="default-styling">
      <slot >
    </div>
    <button @click="$emit('click')">Click me!</button>
  </div>
</template>

但是,如果父組件沒有將內(nèi)容應(yīng)用到該slot,我們最終會在頁面div上呈現(xiàn)一個空的:\

<div>
  <h3>這是一個非常棒的組件</h3>
  <div class="default-styling">
    <!-- slot中沒有內(nèi)容,但仍會呈現(xiàn)此 div-->
  </div>
  <button @click="$emit('click')">Click me!</button>
</div>

v-if在包裝上添加它div可以解決問題。沒有應(yīng)用到slot的內(nèi)容?像這樣:\

<div>
  <h3>這是一個非常棒的組件</h3>
  <button @click="$emit('click')">Click me!</button>
</div>

以上是“vue如何有條件地渲染slot”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

vue
AI