天天看點

32. VUE 元件 slot 插槽

其實這個slot 被翻譯為 插槽,類似于接口。

? 為什麼使用slot ?

插槽的目的是讓我們原來的裝置具備更多的擴充性。

如果我們做一個元件,我們用哪個很多次,那麼此次他都一樣,,那麼這就寫的很死闆。

舉個例子

 某東的導航欄:

32. VUE 元件 slot 插槽
 可以看出有些東西是一樣的,但有些是不一樣的,即:
32. VUE 元件 slot 插槽

 是以這就是為什麼用插槽這個東西;

我們就可以寫一個插槽,即把不一樣 東西 寫在  插槽中 即可。

如何封裝合适呢?抽取共性,保留不同。

最好的封裝方式就是将共性抽取到元件中,将不同暴露為插槽。

一旦我們預留了插槽,就可以讓使用者根據自己的需求,決定插槽中插入什麼内容。

是搜尋框,還是文字,還是菜單。由調用者自己來決

slot基本使用

簡述:直接在模闆上的代碼 直接預留 用 <slot></slot> 這個标簽,就預留了一個插槽了,插槽中的代碼直接在 調用元件的時候 寫在元件其中。

32. VUE 元件 slot 插槽
32. VUE 元件 slot 插槽

<body>

    <template id="cpn">
       <div>
           <h2>cpn-H2-标簽</h2>
           <slot></slot>       <!--此處預留插槽-->
       </div>
    </template>

    <div id="app">
        <cpn><button>插槽按鈕</button></cpn>     <!--此處使用cpn元件 且 填補插槽-->
        <cpn><i>插槽i标簽</i></cpn>     <!--此處使用cpn元件 且 填補插槽-->
        <cpn><span style="color: red">插槽span 紅色字型</span></cpn>     <!--此處使用cpn元件 且 填補插槽-->
    </div>


    <script src="js/vue.js"></script>
    <script>
        const app =  new Vue({
            el:"#app",
            components:{
                'cpn':{
                    template:"#cpn",
                }
            }
        })

    </script>
</body>      

View Code

這就是插槽的基本使用。

但是有一個問題我們發現了:

如果我要用很多遍 插槽按鈕 這個元件,每次都要這樣寫嗎:

32. VUE 元件 slot 插槽
32. VUE 元件 slot 插槽
<div id="app">
        <cpn><button>插槽按鈕</button></cpn>     
        <cpn><button>插槽按鈕</button></cpn>     
        <cpn><button>插槽按鈕</button></cpn>     
        <cpn><button>插槽按鈕</button></cpn>     
        <cpn><button>插槽按鈕</button></cpn>
            ······
        <cpn><button>插槽按鈕</button></cpn>
    </div>      

那豈不是很麻煩,是以插槽也有預設值:

32. VUE 元件 slot 插槽
32. VUE 元件 slot 插槽
<body>
    <template id="cpn">
       <div>
           <h2>cpn-H2-标簽</h2>
           <slot><button>插槽按鈕 — 已在slot中定義預設</button></slot>       <!--此處預留插槽 且 寫入插槽的預設值-->
       </div>
    </template>

    <div id="app">
        <cpn></cpn>                 <!--此處使用cpn元件 用的是插槽預設值(插槽按鈕) -->
        <cpn><i>插槽i标簽</i></cpn>     <!--此處使用cpn元件 且 填補插槽-->
        <cpn><span style="color: red">插槽span 紅色字型</span></cpn>
        <cpn></cpn>                 <!--此處使用cpn元件 用的是插槽預設值(插槽按鈕) -->
        <cpn></cpn>                 <!--此處使用cpn元件 用的是插槽預設值(插槽按鈕) -->
        <cpn></cpn>                 <!--此處使用cpn元件 用的是插槽預設值(插槽按鈕) -->
    </div>


    <script src="js/vue.js"></script>
    <script>
        const app =  new Vue({
            el:"#app",
            components:{
                'cpn':{
                    template:"#cpn",
                }
            }
        })

    </script>
</body>      

是以 我如果要用很多遍 插槽按鈕,直接寫入預設值 ,然後我們就可以直接: <cpn></cpn> 這就是插槽的預設值。

如果不用元件的預設值,那麼你直接在使用元件的時候 在其中些代碼即可。

關于插槽還有一個特性:

當你填補插槽的時候 語句寫 很多很多,這些語句都會直接被填補進 一個 <slot></slot>  ,這就是插槽的一個特點。

即:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插槽</title>
</head>
<body>
    <template id="cpn">
       <div>
           <h2>cpn-H2-标簽</h2>
           <slot></slot>       <!--此處預留插槽 -->
           <slot></slot>       <!--此處預留插槽 -->
       </div>
    </template>

    <div id="app">
        <cpn>
            <div>
                <hr>
                <h3>Hello World</h3>
                <h3>Hello World</h3>
                <hr>
            </div>
        </cpn>

    </div>


    <script src="js/vue.js"></script>
    <script>
        const app =  new Vue({
            el:"#app",
            components:{
                'cpn':{
                    template:"#cpn",
                }
            }
        })

    </script>
</body>
</html>      

運作結果:

32. VUE 元件 slot 插槽

 可以看出 其實:

32. VUE 元件 slot 插槽