1. 程式人生 > >vue入坑之slot(插槽)

vue入坑之slot(插槽)

slot意思為插槽,水溝;

我們可以把它想象為電腦主機板上的插槽,用來插放記憶體條等對應的部件。

官方文件是這樣描述的:


我們將這段話中的“ 內容分發"這四個字作為切入點,比較容易理解,假若我們註冊了一個名為aaa的元件:

var vm=new Vue({
    el:'#app',
    components:{
      aaa:{
        template:"<p>這裡是預設內容</p>"
      }
    }
})

我們在使用元件的時候在元件的內部使用了DOM,那麼我們新增的這些DOM該顯示在哪裡,怎麼顯示?

如:

<aaa><span>我自己添加了DOM</span></aaa>

因為我們在註冊元件的時候並沒有設定<slot>,所以我們新增的DOM內容不會顯示

如果我們在註冊元件的時候設定了slot,如:

var vm=new Vue({
    el:'#app',
    components:{
      aaa:{
        template:"<p><slot></slot>這裡是預設內容</p>"
      }
    }
})

這時候所謂的"內容分發"就會將我們新增的DOM內容分發到卡槽內~

最後出來的效果將會是“我自己添加了DOM這裡是預設內容”。

假若我需要指定插入多個DOM呢?這時候我們就需要對我們設定的<slot>進行命名,稱為具名slot:

var vm=new Vue({
    el:'#app',
    components:{
      aaa:{
        template:"<p><slot name='first'></slot>這裡是預設內容<slot name='second'></slot></p>"
      }
    }
})

我們在使用元件的時候,對新增在元件裡面的內容也需要做一個分發指向,指向插入哪個卡槽內:

<aaa>
  <span slot="first">這裡是第一個位置
  </span>
  <span slot="second">這裡是第二個位置
  </span>
</aaa>
結果將會輸出“這裡是第一個位置這裡是預設內容這裡是第二個位置”。