vue自定义简易封装弹框组件

<template>
    <div class="box">
        <div class="shade" v-show="maskLayer"/>
        <div class="showElementBox" @click.self="closeEvent && closeTier()">
            <div class="showElementTier">
                <slot>内容区域</slot>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    data () {
        return {
            maskLayer:true, // 遮罩层是否显示
            closeEvent: true, // 遮罩层是否点击关闭组件
            parentFact: {} // 父组件实例
        }
    },
    mounted () {
      if (this.$attrs.hide != null) this.maskLayer = false
      if (this.$attrs.closeTier!= null) this.closeEvent = false
      this.parentFact = this.$parent
    },
    methods: {
      closeTier () {
        this.parentFact.popUp = false
      }
    }
}
</script>

组件内部放置一个solt标签可以在外部插入元素自定义结构,另外自定义了两个属性hide、closeTier。在父组件的子标签上添加 hide 可以隐藏遮罩层,默认true。closeTier属性控制点击遮罩层是否关闭关闭弹框,默认 true。
该组件在mounted钩子函数中判断 closeTier 是否存在,存在则将 closeEvent 属性改为 false,达到函数禁用的效果,相反不存在即默认为 true ,通过在mounted 函数中保存父组件的实例,点击相应函数调用父组件实例控制子组件状态的属性并修改,改变弹框状态,并且省略了子传父的回调步骤。

<style scoped>
.box {
    width:100%;
    height:100vh;
    position: absolute;
    top:0;
    left:0;
}
.shade {
    width:100%;
    height:100%;
    background:rgba(0,0,0,0.5);
    position: absolute;
}
.showElementBox {
    width:100%;
    height:100%;
    position: absolute;
    z-index: 100;
    display: flex;
    justify-content: center;
    align-items: center;
}
.showElementTier {
    width:55%;
    height:20%;
    background:white;
    border:0.3vw solid rgb(245,245,245);
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值