vue2 作用域插槽slot-scope详解

插槽分为单个插槽,具名插槽,还有作用域插槽,前两种比较简单这里就不赘述了,今天的重点是讨论作用域插槽。

简单来说,前两种插槽的内容和样式皆由父组件决定,也就是说显示什么内容和怎样显示都由父组件决定

作用域插槽的样式由父组件决定内容却由子组件控制。简单来说:前两种插槽不能绑定数据,作用域插槽是一个带绑定数据的插槽。

注意:在 2.5.0+,slot-scope 不再限制在 <template> 元素上使用,而可以用在插槽内的任何元素或组件上。

1.App.vue

 1 <template>
 2   <div>
 3     <child :propName="items"> <!--传值到子组件-->
 4     <!--写法1 -->
 5       <li
 6         <!--作用域插槽也可以具名 绑定slot name="slotName"-->
 7       slot="slotName"       
 8         <!--把子组件插槽看作一个对象, 赋给scopeName-->
 9       slot-scope="scopeName">
10         <!-- dos="item.do" (子组件中)-->
11         {{scopeName.dos}}
12       </li>
13     </child>
14 
15     <!--写法2 es6 的解构写法 推荐!!!-->
16     <child :propName="items">
17       <li slot="slotName" slot-scope="{item}">
18         {{item.do}}
19       </li>
20     </child>

21 </div> 22 </template> 23 <script> 24 import child from "./components/child.vue" 25 export default{ 26 components:{child}, 27 data(){ 28 return{ 29 items:[ 30 {do:'play'}, 31 {do:'eat'}, 32 {do:'sleep'}, 33 {do:'play'}, 34 {do:'eat'}, 35 {do:'sleep'} 36 ] 37 } 38 } 39 } 40 </script>

 

2.child.vue

 1 <template>
 2   <ul>
 3     <slot name="slotName"  <!--作用域插槽也可以具名!-->
 4         v-for="item in items" 
 5         :dos="item.do"  <!--取循环中的项作为属性 方便父组件调用!-->
 6     ></slot>
 7   </ul>
 8 </template>
 9 <script>
10   export default{
11     props:['items'] <!--父级items 传过来的值!-->
12   }
13 </script>

 

posted @ 2018-12-27 14:21  歲夢灬沉浮  阅读(3539)  评论(0编辑  收藏  举报