slot插槽组件基本用法和传值


## 不使用插槽组件

**father.vue**
<template>
    <div>
        <div>我是爸爸</div>
        <el-button @click="addFn">新增</el-button>
        <children @dataList="dataList"></children>
    </div>
</template>
<script>
import children from './children.vue'
export default {
    name: 'fatherCom',
    components:{children},
    data(){
        return{
            showDialog: false,
            dataL: {}
        }
    },
    methods:{
    }
}
</script>

**children.vue**
<template>
    <div>
        <div>我是儿子</div>
        <el-button @click="sendToFather">上传提交</el-button>
    </div>
</template>
<script>
export default {
    name: 'childrenCom',
    data(){
        return{
        }
    },
    methods:{
    }
}
</script>

## 使用基础插槽组件并传值到父组件可在data中使用
**father.vue**
<template>
    <div>
        <div>我是爸爸</div>
       // 使用具名插槽后使用子组件emit传值dataList,可以到data中使用
        <children @dataList="dataList">
            <template #addBtn>
            // #addBtn = v-slot:addBtn 
                <el-button @click="addFn">新增</el-button>
            </template>
        </children> -->
        
    </div>
</template>
<script>
import children from './children.vue'
export default {
    name: 'fatherCom',
    components:{children},
    data(){
        return{
            reciveData: []
        }
    },
    methods:{
         dataList(val){
            console.log('收到来自儿子',val)
            this.reciveData = val
        },
    }
}
</script>

**children.vue**
<template>
    <div>
        <div>我是儿子</div>
        <slot name="addBtn"></slot>
        <el-button @click="sendToFather">上传提交</el-button>
    </div>
</template>
<script>
export default {
    name: 'childrenCom',
    data(){
        return{
        }
    },
    methods:{
        sendToFather(){
            console.log('发送');
            const dataList = [{id:1,name:'a'},{id:2,name:'b'};
            this.$emit('dataList', dataList);
        },
    }
}
</script>

## 使用基础插槽组件并传值到父组件只可在<template>中使用,
**father.vue**
<template>
    <div>
        <div>我是爸爸</div>
	     <children>
	     // 具名时直接赋值childData是个对象{},需要去娶具体的值,或者直接使用#addBtn="{msg}"
            <template #addBtn="childData">  
                <el-button @click="addFn">新增</el-button>
                <div>{{childData.msg}}</div>
            </template>
         </children>
        
    </div>
</template>
<script>
import children from './children.vue'
export default {
    name: 'fatherCom',
    components:{children},
    data(){
        return{
        }
    },
    methods:{
    }
}
</script>

**children.vue**
<template>
    <div>
        <div>我是儿子</div>
        <slot name="addBtn" :msg="msg"></slot>
        <el-button @click="sendToFather">上传提交</el-button>
    </div>
</template>
<script>
export default {
    name: 'childrenCom',
    data(){
        return{
            msg:'子组件传值到父组件template'
        }
    },
    methods:{
        sendToFather(){
            console.log('发送');
    
        },
    }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值