vue页共用一个组件(对话框提示框)

vue页共用一个组件(对话框提示框),第1张

需求是写一个组件(对话框/提示框)
    这个组件的提示内容自定义,其他页面如果使用这个组件的话
    可以引用个组件 自定义对于的内容就可以

    优点是 不用当每个页面需要这个组件时,重写一遍这个方法
    直接可以写一个 多个页面进行使用
对话框
 在components里面写入dialog.vue
<template>
  <div class="dialog">
    <div class="dialog_cover" v-show="dialog"></div>
    <transition name="fade">
      <div class="dialog_content" v-show="dialog">
        <div class="dialog_head">提示</div>
        <div class="dialog_main">{{ message }}</div>
        <div class="dialog_foot">
          <div @click="hide"><span>取消</span></div>
          <div @click="hide"><span>确认</span></div>
        </div>
      </div>
    </transition>
  </div>
</template>
<script>
export default {
  props: {
    dialog: {
      type: Boolean,
      default: false,
    },
    message: {
      type: String,
      default: "",
    },
  },
  methods: {
    cancel() {
      this.$emit("hide", null);
    },
  },
};
</script>
<style lang="scss" scoped>
.dialog {
  font-size: 0.8rem;
  width: 100%;
  height: 100%;
  .dialog_cover {
    background: rgba(0, 0, 0, 0.5);
    position: fixed;
    z-index: 200;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
  }
  //放大再还原的回d动画
  @keyframes move {
    0% {
      transform: scale(0);/*初始0看不到*/
    }
    50% {
      transform: scale(1.1);/*放大*/
    }
    100% {
      transform: scale(1);/*还原*/
    }
  }
  .fade-enter-active {
    //进入
    animation: move 0.5s;
  }
  .fade-leave-active {
    //离开
    animation: move 0.5s reverse; //反向播放
  }
  .dialog_content {
    width: 80%;
    height: 6rem;
    z-index: 300;
    background: #fff;
    border-radius: 10px;
    position: fixed;
    top: 50%;
    left: 50%;
    margin-left: -40%;
    margin-top: -3rem;
    opacity: 0.9;
    text-align: center;
  }
  .dialog_head {
    padding: 0.2rem;
    color: black;
    font-size: 0.9rem;
    font-weight: bold;
  }
  .dialog_main {
    padding-top: 0.5rem;
  }
  .dialog_foot {
    width: 100%;
    position: absolute;
    bottom: 0;
    border-top: 1px solid #ccc;
    display: flex;
    flex-direction: row;
    justify-content: space-around;
    text-align: center;
    div {
      flex: 1;
      padding: 0.3rem;
    }
    div:first-child {
      border-right: 1px solid #ccc;
      span {
        color: blue;
      }
    }
    div:last-child {
      span {
        color: red;
      }
    }
  }
}
</style>

提示框
 在components里面写入toast.vue
<template>
    <transition name='toast'>
        <div class='toast' v-if='toast'>
            <div class='toast_main' >{{message}}</div>
        </div>
    </transition>
</template>
<script>
export default {
    props:{
        message:{
            type:String,
            required: true
        },
        toast:{
            type:Boolean,
            default:false
        }
    }
}
</script>
<style lang="scss">
// 效果一
// .toast-enter-active,.toast-leave-active{
//   transition: all 1s;
// }
// .toast-enter, .toast-leave-to{
//   opacity: 0;
//   transform: translateY(30px)
// }

// 效果二
// .toast-enter-active{
//     animation: fade 1s ;
// }
// .toast-leave-active{
//     animation: fade 1s reverse;
// }
// @keyframes fade{
//     0%{
//         transform:scale(0);
//     }
//     50%{
//         transform:scale(1.1);
//     }
//     100%{
//         transform:scale(1);
//     }
// }

//效果三
.toast-enter-active{
  animation: fade 0.5s ;
}
@keyframes fade{
    0%{
        transform: translateY(-8px)
    }
    25%{
        transform: translateY(8px)
    }
    50%{
        transform: translateY(-6px)
    }
    75%{
        transform: translateY(6px)
    }
    100%{
        transform: translateY(0px)
    }
}

.toast{
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    text-align: center;
    font-size: 0.7rem;
    display: flex;
    align-items: center;
    justify-content: center;
    .toast_main{
        width: auto;
        padding: 0.6rem;
        padding-top:0.8rem;
        padding-bottom: 0.8rem; 
        background-color: rgba(37,38,45,.9);
        color: #fff;
        opacity: 0.9;
    }
}
</style>

页面引用
!<template>
  <div class="main">
    <!-- <Dialog :dialog="dialog" :message="message" @cancel="cancel" @confirm="confirm"></Dialog> -->
    <Toast :toast="toast" :message="message"></Toast>
  </div>
</template>
<script>
import Dialog from "../../components/dialog.vue";
import Toast from "../../components/toast.vue";
export default {
  data() {
    return {
      dialog: false,//默认显示隐藏type
      toast: false,//默认显示隐藏type
      message: "",//自定义提示内容
    };
  },
  created(){},
  methods:{
    cancel(){//取消
     this.dialog = false;
    },
    confirm(){//确定
       this.dialog = false;
    }
  },
  components: { Dialog, Toast },
};
</script>
<style>
</style>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1296615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存