一、插槽是什么?
Vue中的插槽是 一个非常好用的东西,slot,说白了就是一个占位的
使用插槽的时候可以用 1.v-slot:插槽的名字 || 2.slot=’插槽的名字’
二、插槽的方式
- 默认插槽 (匿名插槽):把父组件的内容分发到子组件的指定位置
- 具名插槽 :给子组件的插槽起一个名字,父组件根据插槽的名字对号入座
作用域插槽 :子组件的数据反馈到父组件,父组件根据子组件传递的数据进行展示,在子组件指定的位置显示
三、插槽的使用
匿名(没有名字的插槽)
//父组件<template><div class="home"><Child><div>{{ msg }}</div></Child></div></template>import Child from "@/components/child";//在父组件引入子组件//子组件<template><div class="child">我是作用域插槽的子组件的内容<slot></slot></div></template>
具名插槽
// 父组件<template><div class="home"><Child>顺序是按照父组件中的名字的先后顺序<template v-slot:one><span>one,</span></template><template v-slot:two><span>two</span></template><template v-slot:default> // 默认插槽<span>three</span></template></Child></div></template>// 子组件<template><div><span>第一个插槽</span><slot name="one"></slot>//给插槽添加一个name是one的名字<span>第二个插槽</span><slot name="two"></slot><span>第三个插槽</span><slot></slot></div></template>
页面显示结果: 第一个插槽one,第二个插槽two,第三个插槽three
作用域插槽 ```vue 定义插槽
使用插槽
{{aaa}};结果是空的 因为没有在定义的组件上传递参数
//slot-scope把组件内的数据带出来
{{aaa}}//‘hello’
<a name="G1B8W"></a>### <br /><a name="ECQpg"></a>#### 四、作用域插槽的应用场景<a name="M7jNd"></a>###### 在子组件中使用v-for创建一个列表循环,然后在父组件中通过子组件标签child调用```vue//父组件<template><div class="home"><child></child><child></child></div></template>import Child from "@/components/child";export default {components: {Child}};//子组件<template><div class="child"><ul><li v-for="item in list" :key='item'">{{item}</li></ul></div></template>data() {return {list: [1, 2, 3]};}
因为调用了两次组件,所以会显示两遍,如果在每次调用时候需要各自渲染各自的效果,就需要作用域插槽
//父组件<Child><template slot-scope="slotProps"><li> {{ slotProps.item }}</li></template></Child><Child><template slot-scope="slotProps"><h1> {{ slotProps.item }}</h1></template></Child>//子组件<template><div class="child"><ul><slot v-for="item in list" :item="item"></slot></ul></div></template><script>export default {name: "Child",data() {return {list: [1, 2, 3]};}};</script>


五、作用域插槽和插槽的区别
过程:
在组建中有两个插槽,slot name=’a’ && slot name=’b’ 会把里面的内容当作虚拟节点存储起来,在调用插槽的时候,把 刚才渲染的虚拟节点,替换掉slot name=’a’;
普通插槽
- 普通插槽渲染的位置在父组件,将父组件渲染好的结果直接替换成自己,创建的过程在父组件进行渲染
作用域插槽
- 作用域插槽内容会被渲染成一个函数,只有被调用的时候才会被渲染,渲染位置在组件内部
