组件插槽

组件插槽

1. 插槽基本使用

1.1理解:

插槽,就是用于占位,等待的父组件的内部内容插入进来
插槽位置

1.2步骤详细描述

①定义组件的时候,在template模板中留一个位置,插槽:
②使用组件的时候,在组件中间,填写内容(这个内容,会传递到slot中)

1.3案例如下

插槽图

<body>
    <div id="app">
        <menu-item>有bug发生</menu-item>
        <menu-item>有一个警告</menu-item>
        <menu-item></menu-item>
    </div>
    <script src="js/vue.js"></script>
    <script>
        Vue.component('menu-item', {
            data: function () {
                return {

                }
            },
            template:
                `
    <div>
        <div>error:</div>
        <slot>默认内容</slot>
    </div>
    `
        })
        var vm = new Vue({
            el: '#app',
            data: {
            },
            methods: {
            }
        })
    </script>
</body>

2. 具名插槽

2.1介绍

具名插槽
2.2实例如下
具名

<body>
    <div id="app">
        <menu-item>
            <p slot="header">头部</p>
            <p>1</p>
            <p>2</p>
            <p slot="footer">尾部</p>
        </menu-item>
        <menu-item>
            <template slot="header">
                <p>标题信息1</p>
                <p>标题信息2</p>
            </template>
            <p>1</p>
            <p>2</p>
            <template slot="footer">
                <p>底部信息1</p>
                <p>底部信息2</p>
            </template>
        </menu-item>
    </div>
    <script src="js/vue.js"></script>
    <script>
        Vue.component('menu-item', {
            data: function () {
                return {

                }
            },
            template:
                `
    <div>
        <slot name='header'></slot>
      
        <slot >默认</slot>
        <slot name='footer'></slot>  
    </div>  
    `
        })
        var vm = new Vue({
            el: '#app',
        })
    </script>
</body>

3. 作用域插槽 ***

3.1语法

插槽定义
插槽内容
3.2示例
作用域插槽:是将父组件的template标签内容,插入到插槽slot中
在这里插入图片描述

    <style>
        .current{
            color: aqua;
        }
    </style>
<body>
    <div id="app">
        <menu-item :list='list'>
            <template slot-scope='slotProps'>
                <strong v-if='slotProps.item.id==2' class='current'>
                    {{slotProps.item.name}}
                </strong>
                <strong v-else>
                    {{slotProps.item.name}}
                </strong>
            </template>
        </menu-item>
    </div>
    <script src="js/vue.js"></script>
    <script>
        Vue.component('menu-item', {
            props: ['list'],
            //  <slot></slot>里要放需要显示的内容
            template:
                `
            <div> 
                <ul>
                 <li :key='item.id' v-for='item in list'>
                    <slot v-bind:item="item">
                        {{item.name}}
                    </slot>
                 </li>   
                </ul>
                </div>   
            `,
        });
        var vm = new Vue({
            el: '#app',
            data: {
                list: [
                    {
                        id: 1,
                        name: 'apple'
                    },
                    {
                        id: 2,
                        name: 'orange'
                    },
                    {
                        id: 3,
                        name: 'banana'
                    }
                ]
            }
        })
    </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值