溫馨提示×

溫馨提示×

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

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

vue使用slot的場景是什么

發布時間:2023-02-01 11:57:03 來源:億速云 閱讀:205 作者:iii 欄目:web開發

這篇文章主要介紹“vue使用slot的場景是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“vue使用slot的場景是什么”文章能幫助大家解決問題。

使用場景:通過slot(插槽)可以讓用戶可以拓展組件,去更好地復用組件和對其做定制化處理;如果父組件在使用到一個復用組件的時候,獲取這個組件在不同的地方有少量的更改,如果去重寫組件是一件不明智的事情。通過slot插槽向組件內部指定位置傳遞內容,完成這個復用組件在不同場景的應用;比如布局組件、表格列、下拉選、彈框顯示內容等。

slot是什么

在HTML中 slot 元素 ,作為 Web Components 技術套件的一部分,是Web組件內的一個占位符

該占位符可以在后期使用自己的標記語言填充

舉個栗子

<template id="element-details-template">
  <slot name="element-name">Slot template</slot>
</template>
<element-details>
  <span slot="element-name">1</span>
</element-details>
<element-details>
  <span slot="element-name">2</span>
</element-details>

template不會展示到頁面中,需要用先獲取它的引用,然后添加到DOM中,

customElements.define('element-details',
  class extends HTMLElement {
    constructor() {
      super();
      const template = document
        .getElementById('element-details-template')
        .content;
      const shadowRoot = this.attachShadow({mode: 'open'})
        .appendChild(template.cloneNode(true));
  }
})

在Vue中的概念也是如此

Slot 藝名插槽,花名“占坑”,我們可以理解為solt在組件模板中占好了位置,當使用該組件標簽時候,組件標簽里面的內容就會自動填坑(替換組件模板中slot位置),作為承載分發內容的出口

可以將其類比為插卡式的FC游戲機,游戲機暴露卡槽(插槽)讓用戶插入不同的游戲磁條(自定義內容)

使用場景

通過插槽可以讓用戶可以拓展組件,去更好地復用組件和對其做定制化處理

如果父組件在使用到一個復用組件的時候,獲取這個組件在不同的地方有少量的更改,如果去重寫組件是一件不明智的事情

通過slot插槽向組件內部指定位置傳遞內容,完成這個復用組件在不同場景的應用

比如布局組件、表格列、下拉選、彈框顯示內容等

分類

slot可以分來以下三種:

  • 默認插槽

  • 具名插槽

  • 作用域插槽

默認插槽

子組件用<slot>標簽來確定渲染的位置,標簽里面可以放DOM結構,當父組件使用的時候沒有往插槽傳入內容,標簽內DOM結構就會顯示在頁面

父組件在使用的時候,直接在子組件的標簽內寫入內容即可

子組件Child.vue

<template>
    <slot>
      <p>插槽后備的內容</p>
    </slot>
</template>

父組件

<Child>
  <div>默認插槽</div>  
</Child>

具名插槽

子組件用name屬性來表示插槽的名字,不傳為默認插槽

父組件中在使用時在默認插槽的基礎上加上slot屬性,值為子組件插槽name屬性值

子組件Child.vue

<template>
    <slot>插槽后備的內容</slot>
  <slot name="content">插槽后備的內容</slot>
</template>

父組件

<child>
    <template v-slot:default>具名插槽</template>
    <!-- 具名插槽?插槽名做參數 -->
    <template v-slot:content>內容...</template>
</child>

作用域插槽

子組件在作用域上綁定屬性來將子組件的信息傳給父組件使用,這些屬性會被掛在父組件v-slot接受的對象上

父組件中在使用時通過v-slot:(簡寫:#)獲取子組件的信息,在內容中使用

子組件Child.vue

<template> 
  <slot name="footer" testProps="子組件的值">
          <h4>沒傳footer插槽</h4>
    </slot>
</template>

父組件

<child> 
    <!-- 把v-slot的值指定為作?域上下?對象 -->
    <template v-slot:default="slotProps">
      來??組件數據:{{slotProps.testProps}}
    </template>
    <template #default="slotProps">
      來??組件數據:{{slotProps.testProps}}
    </template>
</child>

小結:

  • v-slot屬性只能在<template>上使用,但在只有默認插槽時可以在組件標簽上使用

  • 默認插槽名為default,可以省略default直接寫v-slot

  • 縮寫為#時不能不寫參數,寫成#default

  • 可以通過解構獲取v-slot={user},還可以重命名v-slot="{user: newName}"和定義默認值v-slot="{user = '默認值'}"

關于“vue使用slot的場景是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女