vue2 做用域插槽slot-scope详解

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

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

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

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

1.App.vuecomponent

 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>
相关文章
相关标签/搜索