话不多说,下面是alert组件的代码(需要引用node-sass sass-loader scss-loader,主要是为了用scss样式)
<template>
<transition name="dialog-fade">
<div class="wrapper" v-if="isShow">
<div class="alert">
<img class="close-btn" src="../assets/chacha.png" @click="close" />
<div class="sign">提示</div>
<div class="body">
<div class="cell">
{{message}}
</div>
</div>
<div class="footer">
<button @click="onNegativeClick" v-if="!isOnlyPositive" class="negative-btn">{{negativeText}}</button>
<button @click="onPositiveClick" class="positive-btn">{{positiveText}}</button>
</div>
</div>
</div>
</transition>
</template>
<script>
export default {
name: 'my-alert',
props: {
isShow: {
type: Boolean,
default: false
},
negativeText:{
type:String,
default:'取消'
},
positiveText:{
type:String,
default:'确定'
},
message:{
type:String,
default:'确定?'
},
isOnlyPositive:{
type:Boolean,
default:false
}
},
data() {
return {
visible: this.isShow
};
},
methods: {
close:function() {
this.$emit('closeAlert');
},
open:function() {
this.$emit('openAlert');
},
onPositiveClick:function(){
this.$emit('positiveCb');
},
onNegativeClick:function(){
this.$emit('negativeCb');
this.close();
}
}
};
</script>
<style lang="scss" scoped>
.wrapper {
position: fixed;
overflow: auto;
margin: 0;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 999999999;
background-color: rgba(0, 0, 0, 0.25);
font-family: "Microsoft Yahei";
}
button{
cursor: pointer;
font-family: "Microsoft Yahei";
}
.close-btn {
cursor: pointer;
position: absolute;
right: 15px;
top: 12px;
}
.alert {
height: 180px;
300px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -150px;
margin-top: -90px;
background: #F1F6FF;
box-sizing: border-box;
}
.close {
cursor: pointer;
color: #c0ccda;
&:hover {
color: #20a0ff;
}
}
.sign{
text-align: left;
background-color: #579BFE;
font-size: 14px;
color:#fff;
padding-left:20px;
padding-top:12px;
padding-bottom: 12px;
}
.body {
height: 100px;
100%;
display: table;
box-sizing:border-box;
color: #475669;
font-size: 14px;
.cell {
display: table-cell;
vertical-align: middle;
text-align: center;
font-size:16px;
color:#777777;
}
}
.footer {
padding:20px;
padding-top:0;
text-align: right;
box-sizing: border-box;
.negative-btn{
padding-left:13px;
padding-right:13px;
height:25px;
line-height:25px;
font-size:12px;
color:#777777;
border:1px solid #777777;
background-color:white;
margin-right:8px;
}
.positive-btn{
padding-left:13px;
padding-right:13px;
height:25px;
line-height:25px;
font-size:12px;
color:#FD6434;
border:1px solid #FD6434;
background-color:white;
}
}
.dialog-fade-enter-active {
animation: dialog-fade-in .3s;
}
.dialog-fade-leave-active {
animation: dialog-fade-out .3s;
}
@keyframes dialog-fade-in {
0% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
@keyframes dialog-fade-out {
0% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
100% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
}
</style>
使用方法如下
template模板:
<div style="cursor:pointer" @click="alertVisible = true">打开一个弹窗!!!!</div>
<alert @positiveCb="deleteFollowStudent" @closeAlert="deleteInfoClose" message="确认删除?" :is-show="alertVisible" positiveText="删除"></alert>
js代码:
import alert from './alert'
export default {
name: 'hello',
components:{
'alert': alert
},
data () {
return {
msg: 'Welcome to Your Vue.js App',
alertVisible: false, //控制弹窗的显示隐藏
}
},
methods:{
deleteInfoClose: function(){
this.alertVisible = false;
console.log('取消按钮');
}, //取消按钮的回调
deleteFollowStudent: function(){
this.alertVisible = false;
console.log('确定按钮') //确定按钮的回调
}
}
}
最后页面的效果如下:

样式什么的可以根据自己的需要自己调整