如开发一个组件,里面一些子元素但愿是有调用着来定义,能够使用slotvue
<child>没有插槽slot我不展现</child> Vue.component('child',{ template:`<div>child</div>` })
结果:git
注释:在父组件中调用子组件时给子组件添加插槽内容,若是子组件里不包含<slot></slot>元素,则添加的插槽内容会被抛弃github
<child1></child1> <child1>我是默认插槽</child1> <child1>{{parentMsg}}</child1> Vue.component('child1',{ template:`<div>child1<slot>哈哈哈哈</slot></div>` })
结果:spa
注释:code
<child2> <template slot="aaa"> 我是aaa具名插槽 </template> <template slot="bbb"> 我是bbb具名插槽 </template> <!-- V2.6.0以后的写法缩写 --> <template #ccc> 我是ccc具名插槽 </template> </child2> Vue.component('child2',{ template:`<div>child2 <slot name='aaa'></slot> <slot name='bbb'></slot> <slot name='ccc'></slot> </div>` })
<child3> <!-- V2.6.0以前的写法 --> <template slot-scope="scope"> {{scope}} </template> </child3> Vue.component('child3',{ template:`<div>child3 <slot :msg="msg" text="哈哈哈"></slot> </div>`, data(){ return{ msg:"子组件的参数" } } })
结果:component
<child4 > <!-- V2.6.0以后的写法 --> <template v-slot="msg"> <li>{{msg.msg.name}}{{msg.msg.age}}岁</li> </template> </child4> Vue.component('child4',{ template:`<div>child4 <ul> <slot v-for="item in childMsg" :msg=item></slot> </ul> </div>`, data(){ return{ childMsg:[ { name:"张三", age:18 }, { name:"李四", age:19 } ] } } })
结果:
注释:
做用域插槽与普通插槽区别:[做用域插槽]父组件插槽的内容能访问子组件传的数据[普通插槽]则不行blog
源码地址: https://github.com/shangliaoy...作用域