slot插槽小结

......
<script>
    /*
    * 插槽小结:
    * 帮助解决组件间内容传递问题
    * 1.solt - 插槽
       注意:slot没有办法直接绑定事件
       父组件往子组件中传递一些dom节点,元素标签时,没必要通过属性去传递,可以使用插槽的方式,插槽中也可以传入字符串、组件等等
       父模板里调用的数据属性,使用的都是父模板里的数据
       子模版里调用的数据属性,使用的都是子模版里的数据
       未传递给插槽部分的内容时,则会调用插槽部分的默认值

    * 2.具名插槽--通过name属性实现
       v-slot语法不能直接放在标签上,可以用在 components or <template>
       <template v-slot:header>  v-slot:header--可以简写为#header

    * 3.作用域插槽
    *如下:
       父组件调用子组件list,传递给了子组件一个solt
       在子组件中循环内容时调用了这个slot,同时把item的数据传给slot
       slot接收v-slot='slotProps' slotProps-所有传递过来的内容都通过slotProps数据对象接收

       作用域插槽解决的问题:
       当子组件渲染的内容由父组件决定时,通过插槽写法,能够让父组件去调用子组件item里的数据,父组件里直接写item不行,
       因为它只能从父组件作用域里找item数据,找不到无法显示,通过作用域插槽,能够把父组件的item数据从子组件传递过来,
       便于父组件调用。

    * */
    const app = Vue.createApp({
        template:`
            <div>
                <div>1.默认插槽示例</div>
                <test>
                    {{text}}
                    <div>提交</div>
                </test>
                <test/>
                <div>2.具名插槽示例</div>
                <test1>
                    <template v-slot:header>
                        具名插槽--v-slot:name 写法
                    </template>
                    <template #footer>
                        具名插槽 -- #简写
                    </template>
                </test1>
                <div>3.作用域插槽示例</div>
                <test2>
                    <template v-for="item in list">
                        {{item}}
                    </template>
                </test2>
                <test2>
                    <template v-slot="slotProps">
                        <div>父组件中调用子组件{{slotProps.item}}</div>
                    </template>
                </test2>
            </div>
        `,
        data(){
            return{
                text:' <div>给插槽传值时</div>',
                list:['父1','父2','父3']
            }
        },
        created(){
        },
        methods:{}
    })
    app.component('test',{
        template: `
            <div>
                <div>默认插槽</div>
                <slot>没有传值时将使用其默认值{{text}}</slot>
            </div>
        `,
        data(){
            return{
                text:'defaultValue'
            }
        }
    })
    app.component('test1',{
        template: `
            <div>
                <slot name="header">具名插槽--头部</slot>
                <div style="margin-top: 20px">具名插槽</div>
                <slot name="footer">具名插槽-底部</slot>
            </div>
        `,
        data(){
            return{
                text:'defaultValue'
            }
        }
    })
    app.component('test2',{
        template: `
            <div>
                <div style="margin-top: 20px">作用域插槽</div>
                <slot v-for="item in list" :item="item">默认值{{item}}</slot>
            </div>
        `,
        data(){
            return{
                text:'defaultValue',
                list: ['子1','子2','子3']
            }
        }
    })

    const vm = app.mount('#root')
</script>
......
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值