经常使用插槽分为三类:默认插槽,具名插槽,做用域插槽vue
插槽:子组件的内容往父组件里面填充,父组件里面包含的内容会根据插槽的类型填充到对应的slot定义的标签中bash
1,常见的vue父子组件引入ui
//父组件parent.vue
<div class="parent">
<child></child>//在父组件的child中没有内容,此时没有出现插槽
</div>复制代码
//子组件child.vue
<div class="child">
<span>fanfanjun</span>
</div>
复制代码
2,插槽的出现--默认插槽操做spa
//父组件parent.vue
<div class="parent">
<child>//在父组件的child中没有内容,此时没有出现插槽 <span>fanfanjun1</span>
</child>
</div>复制代码
//子组件child.vue
<div class="child">
<slot></slot>
<span>fanfanjun2</span>
</div>复制代码
渲染结果:code
//父组件parent.vue
<div class="parent">
<div class="child">//替换父组件child标签
<span>fanfanjun1</span>//默认由父组件child的里面内容替换
<span>fanfanjun2</span>
</div></div>复制代码
3,具名插槽作用域
//父组件parent.vue
<div class="parent">
<child>//在父组件的child中没有内容,此时没有出现插槽
<span>fanfanjun1</span>
<span slot="content">fanfanjun3</span>
</child>
</div>复制代码
//子组件child.vue
<div class="child">
<slot></slot>
<slot name="content"></slot>
<span>fanfanjun2</span>
</div>复制代码
渲染结果:string
//父组件parent.vue
<div class="parent">
<div class="child">//替换父组件child标签
<span>fanfanjun1</span>//默认由父组件child的里面内容替换
<span>fanfanjun3</span>//具名插槽替换内容
<span>fanfanjun2</span>//子组件里面内容
</div>
</div>复制代码
4,做用域插槽it
//父组件parent.vue
<div class="parent">
<child>//在父组件的child中没有内容,此时没有出现插槽
<span>fanfanjun1</span>
<span slot="content">fanfanjun3</span>
<span slot-scope="user" slot="container" v-for="item in user.data">{{item}}</span>
//v-slot:container="user" or #container="user"
</child>
</div>复制代码
//子组件child.vue
<div class="child">
<slot></slot>
<slot name="content"></slot>
<slot name="container" :data="data"></slot>//2.6之后写法v-bind:user="data" <span>fanfanjun2</span>
</div>
export default {
data: function(){
return {
data: [1,2,3]
}
},
}复制代码
渲染结果:io
//父组件parent.vue
<div class="parent">
<div class="child">//替换父组件child标签
<span>fanfanjun1</span>//默认由父组件child的里面内容替换
<span>fanfanjun3</span>//具名插槽替换内容
<span>1</span>
<span>2</span>
<span>3</span>
<span>fanfanjun2</span>//子组件里面内容
</div>
</div>复制代码