vue.js插槽Slot的用法与具名插槽、作用域插槽的使用

1、基本用法
插槽指允许将自定义的组件像普通标签一样插入内容

import Vue from 'vue'

// 定义组件componentOne 
const compoentOne = {
    template: `
        <div :style="style1">
            <slot></slot> // 定义插槽
        </div>
    `,
    data () {
        return {
            style1: {
                width: '200px',
                height: '200px'
                border: '1px solid #ccc'
            }
        }
    }   
}

// 调用组件
new Vue({
    components: {
        ComOne: componentOne 
    },
    el: '#id',
    data () {
        return {
            val1: '123'
        }
    },
    template: `
        <div>
            <com-one>
                <span>{{val1}}</span> // 使用插槽
            </com-one>
        </div>
    `
})

2、具名插槽
给具体的插槽命名,并在使用的时候传入插槽的名称

import Vue from 'vue'

// 定义组件componentOne 
const compoentOne = {
    template: `
        <div :style="style1">
            <div>
                <slot name="header"></slot> // 定义一个名称为header的插槽
            </div>
            <div>
                <slot name="body"></slot> // 定义一个名称为body的插槽
            </div>
        </div>
    `,
    data () {
        return {
            style1: {
                width: '200px',
                height: '200px'
                border: '1px solid #ccc'
            }
        }
    }   
}

// 调用组件
new Vue({
    components: {
        ComOne: componentOne 
    },
    el: '#id',
    data () {
        return {
            val1: '123',
            val2: '456'
        }
    },
    template: `
        <div>
            <com-one>
                <span slot="header">{{val1}}</span> // 使用插槽'header**重点内容**'
                <span slot="body">{{val2}}</span> // 使用插槽'body'
            </com-one>
        </div>
    `
})

3、作用域插槽
定义插槽的变量作用域到使用插槽

import Vue from 'vue'

// 定义组件componentOne 
const compoentOne = {
    template: `
        <div :style="style1">
            <slot :aa="val1" :bb="val2"></slot> // 给插槽传入变量
        </div>
    `,
    data () {
        return {
            style1: {
                width: '200px',
                height: '200px'
                border: '1px solid #ccc'
            },
            val1: 'slot1',
            val2: 'slot2'
        }
    }   
}

// 调用组件
new Vue({
    components: {
        ComOne: componentOne 
    },
    el: '#id',
    data () {
        return {
            val1: '123'
        }
    },
    template: `
        <div>
            <com-one>
                <span slot-scope="props">{{props.aa}}{{props.bb}}{{val1}}</span> // 定义插槽传入的对象props,并使用
            </com-one>
        </div>
    `
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值