vue插槽slot的默认插槽、具名插槽与作用域插槽的用法

一、vue的插槽slot

vue的开发当中,我们可能也经常会使用插槽slot,父组件给子组件传递DOM元素。插槽的实质,实际上是对于子组件的扩展,通过slot插槽向组件内部指定位置传递内容,也是承载内容分发的出口。在这里,以默认插槽、具名插槽和作用域插槽进行总结说明。

二、vue的默认插槽

1. 默认插槽的说明:

默认插槽相当于是在子组件中写明插槽的内容,当父组件在使用子组件的时候,同时父组件没有指定插槽的内容时,那么就使用子组件定义的默认插槽的内容。

2. 代码示例:

<!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>默认插槽</title>
    <script src="../vue.js"></script>
</head>
<body>

    <div id="app">
        <child></child>
    </div>

    <script>

        Vue.component('child', {
            template: `<div>
                            <slot>默认内容</slot>
                        </div>`
        })
    
        var vm = new Vue({
            el: "#app"
        });
    
    </script>
    
</body>
</html>

三、vue的具名插槽

1. 具名插槽的说明:

具名插槽相当于是在子组件的插槽中给slot添加name属性,进行命名,在父组件需要使用到插槽的地方,给slot添加之前的命名。这样,可以实现向多个组件内部指定位置传递指定的内容。

2. 代码示例:

<!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>具名插槽</title>
    <script src="../vue.js"></script>
</head>
<body>
    
    <div id="app">
        <child>
            <div class="header" slot="header">header</div>
            <div class="footer" slot="footer">footer</div>
        </child>
    </div>

    <script>
        Vue.component('child', {
            template: `<div>
                        <slot name="header">默认内容</slot>
                        <div class="content">content</div>
                        <slot name="footer">默认内容</slot>
                    </div>`
        });

        var vm = new Vue({
            el: "#app"
        });
    
    </script>

</body>
</html>

四、vue的作用域插槽

1. 作用域插槽的说明:

作用域插槽相当于是子组件的DOM结构由外部传递过来,而使用作用域插槽,子组件可以向父组件传递数据,父组件以template模版,通过 slot-scope="props" 进行接收数据,props.item就是传递过来的数据。

2. 代码示例:

<!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>vue的作用域插槽</title>
    <script src="../vue.js"></script>
</head>
<body>
    
    <div id="app">
        <child>
            <template slot-scope="props">
                <h3>{{ props.item }}</h3>
            </template>
        </child>
    </div>

    <script>

        Vue.component('child', {
            data: function(){
                return {
                    list: [21,22,24,43,29,2,33]
                }
            },
            template: `<div>
                            <ul>
                                <slot v-for="item of list" :item=item></slot>
                            </ul>
                        </div>`
        });


        var vm = new Vue({
            el: "#app"
        });
    
    </script>

</body>
</html>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue组件的插槽是一种抽象的概念,用于分发组件的内容。Vue提供了三种类型的插槽默认插槽具名插槽作用域插槽默认插槽是没有名字的插槽,可以在组件模板中使用<slot>标签来定义。当组件没有具名插槽时,所有没有被包裹在具名插槽中的内容都会被传递到默认插槽中。 具名插槽是有名字的插槽,可以在组件模板中使用<slot name="xxx">标签来定义。当组件中有多个插槽时,可以使用具名插槽来指定要分发的内容。 作用域插槽是一种特殊的插槽,可以让父组件向子组件传递数据。作用域插槽可以在组件模板中使用<slot>标签来定义,并且可以使用一个带有参数的函数来向插槽中传递数据。 例如,下面是一个使用作用域插槽的例子: ```html <template> <div> <slot v-bind:user="user"> {{ user.lastName }} </slot> </div> </template> <script> export default { data() { return { user: { firstName: 'John', lastName: 'Doe' } } } } </script> ``` 在父组件中,可以这样使用这个组件: ```html <template> <div> <user-profile> <template v-slot:default="slotProps"> {{ slotProps.user.firstName }} </template> </user-profile> </div> </template> <script> import UserProfile from './UserProfile.vue' export default { components: { UserProfile } } </script> ``` 这个例子中,父组件向子组件传递了一个名为user的数据对象,并且在插槽中使用了一个带有参数的函数来向插槽中传递数据。在插槽中,可以使用slotProps来访问传递进来的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值