1. 程式人生 > 程式設計 >vue中插槽整理及用法分析

vue中插槽整理及用法分析

本教程操作環境:windows7系統、2.9.6版,DELL G3電腦。

vue的插槽(slot)主要分三種:

預設插槽,具名插槽,作用域插槽

vue中的插槽,指的是子元件中提供給父元件使用的一個佔位符;
用標籤表示,父元件可以在這個佔位符中填充任何模板程式碼,比如HTML、元件等,填充的內容會替換掉子元件的標籤(替換佔位符)。

預設插槽

預設插槽是最簡單的一種插槽,http://www.cppcns.com和上面的描述一致,就是通過替換佔位符達到在父元件中更改子元件中內容的效果。

語法:

在子元件中放置一個佔位符(slot):

<template>
    <span>
        <span>莎莎減肥</span>
        <slot></slot>
    </span>
</template>
<script> export default { name: 'chassList' } </script>

然後在父元件中引用這個子元件,並給這個佔位符(slot)填充內容:

<template>
    <div>
        <span>今天吃啥:</span>
        <chassList>
            <span>大嫂不讓莎莎吃飯</span>
        </chassList>
    </div>
</template>

這時頁面展現的內容會是【今天吃啥:莎莎減肥大嫂不讓莎莎吃飯】。

具名插槽

比如在子元件中有兩個要替換佔位符的地方(兩個slot),這時父元件如果要將相應的內容填充到相應的插槽中,靠預設插槽是沒有辦法判斷相應的內容要填充到哪個插槽中的。為了應對這樣的場景,具名插槽應運而生。

具名插槽,其實就是給子元件中的插槽取一個名字,而父元件就可以在引用子元件的時候,根據這個名字對號入座,將相應內容填充到相應的插槽中。

語法:

在子元件中放置兩個具名插槽:

<template>
    <div>
        <span>第一個插槽</span>
        <slot name="one"></slot>
        <span>第二個插槽</span>
        <slot name="two"></slot>
    </div>
</template>
 
<script>
export default {
    name: 'chassList'
}
</script>

在父元件中引用該子元件,並通過v-slot:[name]的方式將相應的內容填充到相應的插槽中:

<template>
    <div>
        <span>兩個插槽:</span>
        <chassList>
            <template v-slot:one>
                <span>one,</span>
            </template>
            <template v-slot:two>
                <span>two</span>
            </template>
        </chassList>
    </div>
</template>

這時頁面展示的內容會是【兩個插槽:第一個插槽one,第二個插槽two】。

使用預設插槽和具名插槽的注意事項

1.如果子元件中存在多個預設插槽,那麼父元件中所有指定到預設插槽的填充內容(未指定具名插槽),會全部填充到子元件的每個預設插槽中。

2.即使在父元件中將具名插槽的填充順序打亂,只要具名插槽的名字對應上了,填充的內容就www.cppcns.com能被正確渲染到相應的具名插槽中,一個蘿蔔一個坑。

3.如果子元件中同時存在預設插槽和具名插槽,但是在子元件中找不到父元件中指定的具名插槽,那麼該內容會被直接丟棄,而不會被填充到預設插槽中。

作用域插槽

作用域插槽相比於前面的預設插槽和具名插槽,會比較難於理解和運用。

  • 前面的兩個插槽強調的是填充佔位的【位置】;
  • 作用域插槽強調的則是資料作用的【範圍】;
  • 作用域插槽,就是帶引數(資料)的插槽;

在子元件的插槽中帶入引數(資料)提供給父元件使用,該引數(資料)僅在插槽內有效,父元件可以根據子元件中傳過來的插槽引數(資料)對展示內容進行定製。

語法:

在子元件中放置一個帶引數(資料)的插槽:

<template>
    <div>
        <span>插槽中的引數值是</span>
        <slot :isAllwo="isAllwo"></slot>
    </div>
</template>
 
<script>
export default {
    name: 'classList',data() {
        return {
            isAllwo: {
                one: 'one',two: 'two'
            }  
        }
    }
}
</script>

在父元件中引用該子元件,並通過slot-scope來接受子元件的插槽中傳過來的引數和使用該資料。

<template>
    <div>
        <span>作用域插槽:</span>
        <classList>
            <template slot-scope="isAllwo">
                {{ isAllwo.isAllwo.one}}
            </template>
        </classList>
    </div>
</template>

這時頁面展示的內容會是【作用域插槽:插槽中引數值是one】。

因為在template的{{}}是支援表示式的,這個時候就可以利用子元件傳過來的引數值的不同進行頁面內容的定製。

<template>
    <div>
        <span>作用域插槽:</span>
        <classList>
            <template slot-scope="isAllwo">
                {{ isAllwo.isAllwo.one|| '空值' }}
            </template>
        </classList>
    </dinlmScPybv>
</template>

這時,如果子元件中傳過來的引數是空值,頁面的展示內容就會是【作用域插槽:插槽中引數值是空值】。

作用域插槽的使用場景多種多樣,在各種框架中的應用也是十分廣泛,比如ElementUI中的對錶格的某一行或某一列進行展示內容的定製,就是作用域插槽的一個典型應用場景。

到此這篇關於vue中插槽整理及用法分析的文章就介紹到這了,更多相關vue中有幾種插槽內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!