今天看了看Vue的文档,发现了v-slot这个指令,生怕掉队的我赶紧补习了一下

直接上代码!!!


//父组件
<template>
    <!--在此处添加渲染的内容-->
    <div>
        <el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>

        <base-prop :dialogFormVisible="dialogFormVisible" :title="title" @backBtn="back" @submitBtn="submitBtn">
            //这种是简写方式,也可以写成v-slot:contents,还可以使用作用域
            <template #contents>
                <el-form :model="form">
                    <el-form-item label="活动名称" :label-width="formLabelWidth">
                        <el-input v-model="form.name" autocomplete="off"></el-input>
                    </el-form-item>
                    <el-form-item label="活动区域" :label-width="formLabelWidth">
                        <el-select v-model="form.region" placeholder="请选择活动区域">
                            <el-option label="区域一" value="shanghai"></el-option>
                            <el-option label="区域二" value="beijing"></el-option>
                        </el-select>
                    </el-form-item>
                </el-form>
            </template>
        </base-prop>
    </div>
</template>

<script type="text/ecmascript-6">
    import BaseProp from './BaseProp.vue'
    //将渲染的内容导出
    export default{
        props: {},
        data(){
            return {
                dialogFormVisible: false,
                title: '测试',
                form: {
                    name: '',
                    region: ''
                },
                formLabelWidth: '120px'
            }
        },
        methods: {
            submitBtn(obj){
                console.log(this.form);
                console.log(obj);
            },
            back(b){
                this.dialogFormVisible = b;
            }
        },
        components: {BaseProp},
        computed: {},
        watch: {},
        created(){
        },
        mounted(){
        },

    }
</script>

<style scoped>
    /**渲染内容的样式**/
</style>
//子组件
<template>
    <!--在此处添加渲染的内容-->
    <div>
        <el-dialog :title="title" :visible.sync="visible">
            <slot name="contents"></slot>
            <div slot="footer" class="dialog-footer">
                <el-button @click="back">取 消</el-button>
                <el-button type="primary" @click="submit">确 定</el-button>
            </div>
        </el-dialog>
    </div>
</template>

<script type="text/ecmascript-6">
    //将渲染的内容导出
    export default{
        props: {
            title: {//标题
                type: String,
                default: () => {
                    return '弹出层'
                }
            },
            dialogFormVisible: {
                type: Boolean,
                required: true
            }

        },
        data(){
            return {
                visible: false
            }
        },
        methods: {
            back(){
                this.visible = false;
            },
            submit(){
                this.$emit('submitBtn', true);
            }
        },
        components: {},
        computed: {
        },
        watch: {
            'dialogFormVisible': function (newVal, oldVal) {
                this.visible = newVal;
            },
            'visible': function (newVal, oldVal) {
                this.$emit('backBtn', newVal);
            }
        },
        created(){
        },
        mounted(){
        },

    }
</script>

<style scoped>
    /**渲染内容的样式**/
</style>

 

Logo

前往低代码交流专区

更多推荐