VUE组件中插槽的理解与使用

    科技2025-06-16  11

    VUE组件中插槽的理解与使用

    什么是插槽?

    插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。通俗的说是:slot 是在父组建控制了子组件显示或隐藏相关内容

    插槽的分类: 1、普通插槽:通过一个 slot 标签声明一个区域来为它存放实参,

    Vue.component('child',{ template:`<div><slot>你好</slot></div>` }) new Vue({ el:'#app', template:`<div><child>hello</child></div>` })

    如果在上面这个代码中,子组件没有 slot 标签,那么父组件中 hello 文本将会被 忽略。从函数的角度来理解,这里的 slot 相当于一个形参,hello 相当于一个实 参,如果没有 slot 的接收,hello 就渲染不到页面上。Slot 标签中的“你好”是 默认值 default,如果父元素没有传值,将会显示默认值“你好”

    2、具名插槽:在一个组件中有多个插槽,调用的时候为了给不同的组件传递 参数就需要为插槽进行命名。为不同需求的组件传递不同的参数。

    //具名插槽 Vue.component('child',{ template:`<div> <slot name="header"></slot> <h1><slot name="footer"></slot></h1> </div>` }) new Vue({ el:'#app', template:`<child> <template v-slot:header>This is header</template> <template v-slot:footer>This is footer</template> </child>` })

    代码中,子组件中有 header 和 footer 两个 name 不同的 flot,他们所接收的文本 根据 name 的不同而接收的值不同。Footer 的 h1 标签也体现了不同值满足不同 的需求。从函数角度出发,具名插槽可以理解为是传递了多个不同参数。 这 里 不 仅 可 以 在 父 组 件 与 子 组 件 中 操 作 , 也 可 以 通 过 在 html 代码中加入想要加入的片段。

    <div id="app"> <child> <template v-slot:header>您好1</template> <template v-slot:footer>您好2</template> </child> </div>

    3、作用域插槽:作用域插槽的样式由父组件决定,内容却由子组件控制。前 两种插槽不能绑定数据,作用域插槽是一个带绑定数据的插槽。简单的来说就是 子组件提供给父组件参数,该参数仅限于插槽中使用,父组件可以根据子组件传 过来的插槽数据来进行不同的方式展现和填充插槽的内容

    //slot插槽,为div中的实共提供插入位置 template:` <div> <p><s1ot :user-"user" :list-"list >slot</s1ot></p> </div>` <div id="app"> <my-div> <template v-slot:default="scope"> {{scope.user.name}}--{{scope.list}} </template> </my-div> </div>

    在 template 标签中使用 v-slot:default=‘scope’;scope 是 template 标签 中可以使用的作用域对象。scope 中存放着 user、和 list 中的参数。

    Processed: 0.009, SQL: 8