作用域插槽
Vue.component('child', { data(){ return { list:[1,2,3,4] } }, template: ` `,})let vm = new Vue({ el: '#root'})
- { {item}}
上面代码,如果此时有个需:child
组件在很多地方会被调用,我希望在不同的地方调用child
的组件时,这个列表到底怎么循环,列表的样式不是child
组件控制的,而是外部child
模版站位符告诉我们组件的每一项该如何渲染,也就是说这里不用li
标签,而是要用slot
标签。
Vue.component('child', { data(){ return { list:[1,2,3,4] } }, template: `//固定写法,属性值可以自定义 { {props.item}} //用插值表达式就可以直接使用`,})let vm = new Vue({ el: '#root'})
<slot v-for="item of list" :item=item></slot>
这段代码的意思是child
组件去做一个列表的循环,但是列表项中的每一项怎么显示,我并不关心,具体怎么显示,外部你来告诉我.
<template slot-scope="props"></template>
这是一个固定写法,属性值可以自定义。它的意思是当子组件用slot
时,会往子组件里传递一个item
,从子组件接收的数据都放在了props
上。
什么时候使用作用域插槽呢?当子组件循环或某一部分的dom
结构应该由外部传递进来的时候,我们要用作用域插槽,使用作用域插槽,子组件可以向父组件的作用域插槽里传递数据,父组件如果想接收这个数据,必须在外层使用template
模版占位符,同时通过slot-scope
对应的属性名字,来接收你传递过来的数据,上面代码,传递一个一个item
过来,在父组件的作用域插槽里面,就可以接收到这个item
,就可以使用它了。