Vue2.6插槽v-slot是如何使用的


slot種類:

  匿名插槽、具名插槽、作用域插槽


子組件ChildrenHasSlot.vue
:

 1 <template>
 2   <div>
 3     我是子組件ChildrenHasSlot.vue
 4     <slot>我是默認值</slot>
 5     <slot name="chacaoB">我是chacaoB默認值</slot>
 6     <slot name="chacaoC" :data1="data1" :data2="data2">我是chacaoC默認值</slot>
 7     <slot name="chacaoD" :data1="data1" :data2="data2">我是chacaoD默認值</slot>
 8   </div>
 9 </template>
10 
11 <script>
12 export default {
13   name: "ChildrenHasSlot",
14   data() {
15     return {
16       data1: {
17         a: 111,
18         b: 222
19       },
20       data2: {
21         c: 333,
22         d: 444
23       }
24     }
25   }
26 }
27 </script>

 

父組件ParentDemoSlot.vue 

 1 <template>
 2   <div>
 3     <ChildrenHasSlot>
 4 
 5       <!-- 匿名插槽 -->
 6       <template v-slot:default>
 7         <h4>這是插入'默認'插槽的內容</h4>
 8       </template>
 9 
10       <!-- 具名插槽 -->
11       <template v-slot:chacaoB>
12         <h4>這是插入插槽B的內容</h4>
13       </template>
14 
15       <!-- 作用域插槽 -->
16       <template v-slot:chacaoC="slotProps">
17         <h4>這是插入插槽C的內容</h4>
18         <h4>{{slotProps}}</h4>
19         <h4>data1數據:{{slotProps.data1}}</h4>
20         <h4>data2數據:{{slotProps.data2}}</h4>
21       </template>
22 
23       <!-- 作用域插槽 解構slot傳值 -->
24       <template v-slot:chacaoD="{data1,data2}">
25         <h4>這是插入插槽D的內容</h4>
26         <h4>data1數據:{{data1}}</h4>
27         <h4>data2數據:{{data2}}</h4>
28       </template>
29 
30     </ChildrenHasSlot>
31   </div>
32 </template>
33 
34 <script>
35 import ChildrenHasSlot from "@/components/ChildrenHasSlot";
36 
37 export default {
38   name: "ParentDemoSlot",
39   components: {
40     ChildrenHasSlot
41   },
42   data() {
43     return {}
44   }
45 }
46 </script>

 

 

 

 

 

 

1. 匿名插槽:

子組件定義占位:

<slot>我是默認值</slot>

 

父組件使用:

方式1:

<template v-slot:default>
 <h4>這是插入'默認'插槽的內容</h4>
</template>

 

等價於

方式2:defalut可以省略,加上只是為了更直觀理解

<template v-slot>
 <h4>這是插入'默認'插槽的內容</h4>
</template>

 

 

2. 具名插槽(有具體名字的插槽):

子組件定義占位:

<slot name="chacaoB">我是chacaoB默認值</slot>

 

父組件使用:

<template v-slot:chacaoB>
  <h4>這是插入插槽B的內容</h4>
</template>

 

3.作用域插槽(可從子組件插槽傳值到父組件插槽使用處):

子組件定義占位:

<slot name="chacaoC" :data1="data1" :data2="data2">我是chacaoC默認值</slot>

 

父組件使用:

<template v-slot:chacaoC="slotProps">
<h4>這是插入插槽C的內容</h4>
<h4>{{slotProps}}</h4>
<h4>data1數據:{{slotProps.data1}}</h4>
<h4>data2數據:{{slotProps.data2}}</h4>
</template>

TIPS: slotProps的名字不是必須的指定的名稱,可以DIY

 

當然也可以用ES6的解構出這些數據這樣:

<template v-slot:chacaoD="{data1,data2}">
  <h4>這是插入插槽D的內容</h4>
  <h4>data1數據:{{data1}}</h4>
  <h4>data2數據:{{data2}}</h4>
</template>

TIPS:slotProps代表子組件通過插槽傳遞的所有data數據,因為我們傳遞了2個分別是data1、data2,所以,slotProps是這樣的:
{ "data1": { "a": 111, "b": 222 }, "data2": { "c": 333, "d": 444 } }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM