如何封装头部导航组件弹出层

第一步 在html中设置一个存放模态框的盒子mask

html样式
 <div class="mask" v-show="shownav">
      <div class="top" @click="shownav = false">X</div>
      <jiugongge :bg="'transparent'" :color="'#fff'"></jiugongge>
       <myHeader @showModel="showModel"></myHeader>
       <!--myHeader是你封装的子组件  然后使用自定义事件接受子组件传递过来的值-->
    </div>  
<!--jiugongge是你封装的子组件  然后使用自定义属性父组件传值给子组件-->
<jiugongge :bg="'#fff'" :color="'#666'"></jiugongge>

css样式

.mask {
    width: 100%;
    height: 514px;
    position: absolute;
    top: 0;
    left: 0;
    background-color: rgba(0,0,0,.7);
    z-index: 99999;
    .top {
      color: #fff;
      text-align: right;
      font-size: 40px;
      padding: 10px;
    }
}
js逻辑
<script>
import myHeader from '@/components/myHeader'
import jiugongge from '@/components/Jiugongge.vue'
export default {
    data() {
        return {};
    },
    mounted() {},
    methods: {
     showModel(val) { 
      this.shownav = val
    }},
    components:{}
};
</<script>

子组件的代码

在components目录里面的jiugongge.vue中

html样式

给模态框加入动态样式来显示两个不同样式的模态框

  <div class="nav" :style="{'backgroundColor':bg,'color':color}">
  </div>
css样式
.nav {
  width: 100%;
  height: 440px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  background-color: #fff;
  margin: 10px 0 20px 0;
  }
js逻辑
<script>
export default {
  props:["bg","color"], //父组件传递过来的值 
    data() {
        return {};
    },
    mounted() {},
    methods: {},
    components:{}
};
</script>

在components目录里面的myHeader.vue中

html样式

给模态框加入动态样式来显示两个不同样式的模态框

    <div class='head'>
     <div class="right" @click="show">
            <i class="iconfont icon-nav"></i>
            <span>导航</span>
        </div>
  </div>
css样式
.head {
    width: 100%;
    height: 150px;
    background-color: #fff;
    padding: 23px 26px;
    overflow: hidden;
    display: flex;
    position: fixed;
    z-index: 9999;
    top: 0;
    left: 0;
    align-items: center;
    justify-content: space-between;
     .right {
        width: 90px;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        font-size: 30px;
        color: #999;
        i {
            font-size: 32px;
        }
        span {
            margin-top: 10px;
        }
    }
}
js逻辑
<script>
export default {
  props:["bg","color"], //父组件传递过来的值 
    data() {
        return {};
    },
    mounted() {},
    methods: {
     show() {  //使用子传父 把属性传递到父组件
            this.$emit('showModel',true)
        }},
    components:{}
};
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值