Vue try popup Modal component
by cactus77kiki
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<div id="app">
<!--component test-->
<button id="show-modal" v-on:click="showModal = true">Show Modal</button>
<modal v-if="showModal" v-on:close="showModal = false">
<h3 slot="header">
custom header
</h3>
<h3 slot="body">
<input type="text" v-model = "inputs.id"/>
<input type="text" v-model = "inputs.name"/>
</h3>
<h3 slot="footer">
custom footer
<button v-on:click="GetData()">
Get
</button>
</h3>
</modal>
</div>
CSS
/*vue modal component style*/
.modal-mask {
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .5);
display: table;
transition: opacity .3s ease;
}
.modal-wrapper {
display: table-cell;
vertical-align: middle;
}
.modal-container {
width: 300px;
margin: 0px auto;
padding: 20px 30px;
background-color: #fff;
border-radius: 2px;
box-shadow: 0 2px 8px rgba(0, 0, 0, .33);
transition: all .3s ease;
font-family: Helvetica, Arial, sans-serif;
}
.modal-header h3 {
margin-top: 0;
color: #42b983;
}
.modal-body {
margin: 20px 0;
}
.modal-default-button {
float: right;
}
/*
* The following styles are auto-applied to elements with
* transition="modal" when their visibility is toggled
* by Vue.js.
*
* You can easily play with the modal transition by editing
* these styles.
*/
.modal-enter {
opacity: 0;
}
.modal-leave-active {
opacity: 0;
}
.modal-enter .modal-container,
.modal-leave-active .modal-container {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
Vue
Vue.component('modal', {
template: '<transition name="modal">' +
'<div class="modal-mask">'+
'<div class="modal-wrapper">'+
'<div class="modal-container">'+
'<div class="modal-funcs">'+
'<button class="modal-default-button" v-on:click="$emit(\'close\')">' +
'X'+
'</button>'+
'</div>'+
'<div class="modal-header">' +
'<slot name="header">' +
'default header' +
'</slot>'+
'</div>'+
'<div class="modal-body">'+
'<slot name="body">'+
'default body'+
'</slot>'+
'</div>'+
'<div class="modal-footer">'+
'<slot name="footer">'+
'default footer'+
/*'<button class="modal-default-button" v-on:click="$emit(\'close\')">' +
'OK'+
'</button>'+*/
'</slot>'+
'</div>'+
'</div>'+
'</div>'+
'</div>'+
'</transition>'
});
var app =new Vue({
el: "#app",
data: {
showModal: false,
inputs:{
id: "",
name: ""
}
},
methods: {
GetData: function(){
console.log(this.inputs);
}
}
})