插槽和具名插槽的使用

插槽和具名插槽的使用
首先我们先注册一个组件然后在#app内部使用

html:
<div id="app">
        <cpn></cpn>
        <br>
        <cpn>
            <button>按钮</button>
        </cpn>
        <br>
        <cpn>
            <input type="text" placeholder="请输入名字">
        </cpn>
        <br>
        <cpn></cpn>
    </div>
    <template id="cpn">
        <div>
            <h3>我是标题</h3>
            <p>我是内容</p>
            <slot>
                <!-- 这里的p标签时一个默认的标签,因为页面需要p标签比较多 -->
                <p>张益达</p>
            </slot>
        </div>
    </template>
js:
 const app = new Vue({
            el:"#app",
            data:{

            },
            components:{
                cpn:{
                    template:"#cpn"
                }
            }
        })

要注意,当我们使用插槽的时候在注册组件内部也就是template内部添加一个<slot></slot>这个标签

当我们页面需要多个重复内容的时候,我们可以在slot标签内部写一个默认的标签(就是你页面过多重复的标签)

<cpn></cpn>默认就显示<slot></slot>标签里的内容

如果你想使用其他标签可以直接在<cpn></cpn>标签内部添加,可以直接覆盖<slot></slot>标签内部的标签

具名插槽的使用
其实具名插槽和普通的插槽并没有太大的差别,无非就是给注册组建中<slot></slot>标签添加一个name属性,在<cpn></cpn>标签内部更改的时候在添加标签内部添加一个name属性进行修改。

 <div id="app">
        <cpn>
            <span slot="left">返回</span>
            <span slot="content">标题</span>
            <span slot="right">详情</span>
        </cpn>
        <br>
        <cpn>
            <button>按钮</button>
        </cpn>
        <br>
        <cpn>
            <input type="text" placeholder="请输入名字">
        </cpn>
        <br>
        <cpn></cpn>
    </div>
    <template id="cpn">
        <div>
            <h3>我是标题</h3>
            <p>我是内容</p>
            <slot>
                <!-- 这里的p标签时一个默认的标签,因为页面需要p标签比较多 -->
                <p>张益达</p>
            </slot>
            <slot name="left">左边</slot>
            <slot name="content">中间</slot>
            <slot name="right">右边</slot>
        </div>
    </template>

这个时候页面原本左边、中间、右边就改成了返回、标题、详情
以上就是具名插槽的使用

以下是所有的代码和效果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <cpn>
            <span slot="left">返回</span>
            <span slot="content">标题</span>
            <span slot="right">详情</span>
        </cpn>
        <br>
        <cpn>
            <button>按钮</button>
        </cpn>
        <br>
        <cpn>
            <input type="text" placeholder="请输入名字">
        </cpn>
        <br>
        <cpn></cpn>
    </div>
    <template id="cpn">
        <div>
            <h3>我是标题</h3>
            <p>我是内容</p>
            <slot>
                <!-- 这里的p标签时一个默认的标签,因为页面需要p标签比较多 -->
                <p>张益达</p>
            </slot>
            <slot name="left">左边</slot>
            <slot name="content">中间</slot>
            <slot name="right">右边</slot>
        </div>
    </template>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{

            },
            components:{
                cpn:{
                    template:"#cpn"
                }
            }
        })
    </script>
</body>
</html>

在这里插入图片描述
如有问题请及时联系,也好及时更改,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有思想的前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值