【学习前端第六十七课】组件的插槽

组件的插槽

组件本身是一个容器,也是一个vue对象(data,methods…),也是一个虚拟DOM(html标签,但是这些html标签不是既定一些html标签,而是我们创建的所以也叫虚拟标签)

1、普通插槽

组件本身是一个容器,这个容器本身是空的,当我峨嵋你把需要封装的html标签装进这个组件之后,我们可以认为这个组件的内部的容积就直接塞满了,那就意味着,无法再向组件内部添加新的html结构,但是我们想在每次一个调用组件的时候,渲染一点个性化的东西进去,这个时候我们需要给组件去做一个预留空间,这个预留空间就是插槽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <one>
            <p>我是栏目一的内容</p>
            <!-- 这样插入时没有效果的 -->
        </one>
    </div>
    <template id="temp1">
        <div>
            <h2>我是标题</h2>
        </div>
    </template>
</body>
<script src="js/vue.js"></script>
<script>
    var one = {
     
     
        template:"#temp1"
    };
    new Vue({
     
     
        el:"#app",
        components:{
     
     
            one
        }
    })
</script>
</html>

以上的代码在渲染的时候,我们在虚拟DOM one的里面写入了一个p标签,这就是所谓的插入,但是这个并没有效果,因为我们并没有在one组件的内部留下预留空间,也就是插槽

如果想要在组件内部预留插槽,需要使用 <slot></slot> 的标签完成

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <one>
            <p>我是栏目一的内容</p>
            <p>我是栏目一的内容</p>
            <p>我是栏目一的内容</p>
            <p>我是栏目一的内容</p>
            <p>我是栏目一的内容</p>
        </one>
    </div>
    <template id="temp1">
        <div>
            <h2>我是标题</h2>
            <slot>
                <!-- 
                    <p>我是栏目一的内容</p>
                    <p>我是栏目一的内容</p>
                    <p>我是栏目一的内容</p>
                    <p>我是栏目一的内容</p>
                    <p>我是栏目一的内容</p>
                 -->
            </slot> <!-- 这是预留的插槽 -->
        </div>
    </template>
</body>
<script src="js/vue.js"></script>
<script>
    var one = {
     
     
        template:"#temp1"
    };
    new Vue({
     
     
        el:"#app",
        components:{
     
     
            one
        }
    })
</script>
</html>

代码分析:

在上面的代码里面,我们在one这个虚拟标签插入了5个p标签,这个5个p标签会全部插入到slot的位置

一个插入点插入多个插槽

现在我们想让刚才的代码当中前3个p标签出现在标题的上方,后2个p标签出现在标签的下方,明显刚才的插槽肯定是不能的满足的,那么应该怎么写?

如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值