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

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 中的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值