1. 程式人生 > >vue中slot的理解

vue中slot的理解

Slot的通俗理解

是“佔坑”,在元件模板中佔好了位置,當使用該元件標籤時候,元件標籤裡面的內容就會自動填坑(替換元件模板中<slot>位置),當插槽也就是坑<slot name=”mySlot”>有命名時,元件標籤中使用屬性slot=”mySlot”的元素就會替換該對應位置內容;


Slot使用
1、元件中有單個或多個未命名slot標籤時,如下:
<Child><span style=”color:red;”>hello world</span></Child>   

<template>    

  <div>

<slot></slot>

<slot  style=”color:blue;” >這是在slot上添加了樣式</slot>

<slot  name=”mySlot”>這是擁有命名的slot的預設內容</slot>

</div>

</template>

會輸出:兩個紅色的hello world,以及一個使用slot的預設內容

注意:在slot標籤新增樣式無效。擁有命名的插槽不能被不含slot屬性的標籤內容替換,會顯示slot的預設值(具名slot具有對應性);


2、元件中有多個命名的slot插槽時,可以實現父元件對子元件的指定位置顯示內容或傳參,如下:

<Child>

<span slot="header">hello world</span>

<span slot="main">hello world</span>

<span slot="footer">hello world</span>

<span slot="other">{{otherData}}</span>

</Child>

<template>

<div>

<slot  name=”header”>這是擁有命名的slot的預設內容</slot>

<slot  name=”main”>這是擁有命名的slot的預設內容</slot>

<slot  name=”footer”>這是擁有命名的slot的預設內容</slot>

<slot  name=”other”>這是擁有命名的slot的預設內容</slot>

</div>

</template>

3、作用域插槽!!:
使用時候子元件標籤<Child>中要有<template scope=”scopeName”>標籤,再通過scopeName.childProp就可以呼叫子元件模板中的childProp繫結的資料,所以作用域插槽是一種子傳父傳參的方式,解決了普通slot在parent中無法訪問child資料的去問題;

作用域插槽代表性的用例是列表元件,允許在parent父元件上對列表項進行自定義顯示,如下該items的所有列表項都可以通過slot定義後傳遞給父元件使用,也就是說資料是相同的,不同的場景頁面可以有不同的展示方式:

   <ul>

      <slot name="item" v-for="item in items" :text="item.text" :myname="item.myname" >

         slot的預設內容

      </slot>

   </ul>

   <Child>

      <template slot="item" scope="props">

        <li>{{props.myname}}</li>

      </template>

   </Child>