本文只是作为练习弹出框,弹框内部的东西需要进行自定义添加,主要对更新,删除,新建 ,提示四种弹框进行实现,例子中只是简单的组件应用

Modal.vue文件

<template>
<div id ="modalPopBox" v-if="innerAriaShow">
<div class="el-modal-wrapper">
<div class="el-modal-box">
<div class="el-modal-header">
<span class="el-modal-title">{{ariaLabel}}</span>
<span class="close" @click="closeModal()">x</span>
</div>
<div class="el-modal-content">
<slot name="body"></slot>
</div>
<div class="el-modal-btns">
<slot name="btns"></slot>
</div>
</div>
</div>
</div>
</template>
<script>
export default{
name:'modalPopBox',
props:{
ariaLabel:{
type:String,
default:'prompt'
},
ariaShow:{
type:Boolean,
default:false
},
itemId:{
type:Number
}
},
data:function(){
return {
innerAriaShow:this.ariaShow,
updateModal:'',
deleteModal:'',
addModal:'',
promptModal:''
}
},
methods:{
closeModal:function(){
this.innerAriaShow = false;
if(this.ariaLabel=='Update'){
this.updateModal=false;
this.$emit('getUpdateModal',this.updateModal);
}
if(this.ariaLabel=='Delete'){
this.deleteModal=false;
this.$emit('getDeleteModal',this.deleteModal);
}
if(this.ariaLabel=='New'){
this.addModal = false;
this.$emit('getAddModal',this.addModal);
}
if(this.ariaLabel=='Prompt'){
this.promptModal = false;
this.$emit('getPromptModal',this.promptModal);
}
}
}
}
</script>
<style>
#modalPopBox{
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
/*background-color: rgba(0, 0, 0, .5);*/
display: table;
transition: height 2s ease;
}
.el-modal-wrapper{
display:table-cell;
vertical-align:middle;
}
.el-modal-box{
width:400px;
margin:0 auto;
border-radius:6px;
/*height:300px;*/
padding:10px 30px;
background-color:#fff;
border-radius:2px;
box-shadow:0 2px 8px ragb(0,0,0,0.33);
/*transition:all 1s ease;*/
font-family:Helvetica,Arial,sans-serif;
transition: height 2s ease;
}
.el-modal-header{
height:30px;
line-height:30px;
}
.el-modal-header .el-modal-title{
font-size:16px;
font-weight: bold;
color:#333;
}
.el-modal-header .close{
position:relative;
top:0;
left:350px;
width:30px;
height:30px;
cursor:pointer;
}
.el-modal-header .close:hover{
color:#f44;
}
.el-modal-content{
margin:0 auto;
text-align:center;
padding:10px 10px;
}
.el-modal-btns{
text-align:center;
padding:10px 0;
}
.el-modal-btns button{
/*width:60px;*/
border-radius:5px;
background-color: #409eff;
padding:6px 10px;
cursor:pointer;
color:#fff;
border-color:#409eff;
border-style:none;
} </style>

 在其他组件中应用

<template>
<div id = "outletapp">
<div class="btns">
<tr class="data-tr" v-for="(item,index) in itemList">
<td class="data-td">{{item.value1}}</td>
<td class="data-td">{{item.value2}}</td>
<td class="data-td">
<button class="buttonCurd" @click="update(item)">Update</button> |
<button class="buttonCurd" @click="del(item.id)">Delete</button>
</td>
</tr>
</div>
<div class="modal-mask" v-if="updateModal">
<modal-pop-box :ariaLabel="modalName" :ariaShow=true :itemId="countInfo.itemId" @getUpdateModal="getUpdateModal">
<div slot="body">
<table>
<tr>
<td class="alignright"><label for="manage_accout">key1:</label></td>
<td class="alignleft"><input name="manage_accout" type="text" v-model="pars.value1"></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td class="alignright"><label for="queue_accout">key2:</label></td>
<td class="alignleft"><input name="queue_accout" type="text" v-model="pars.value2"></td>
</tr>
</table>
</div>
<div slot="btns">
<button type="submit" @click="updateSubmit(pars.id)">Submit</button>
</div>
</modal-pop-box>
</div>
<div class="modal-mask" v-if="deleteModal">
<modal-pop-box :ariaLabel="modalName" :ariaShow=true v-if="deleteModal" :itemId="countInfo.itemId" @getDeleteModal="getDeleteModal">
<div slot="body">
确认删除该条信息么?
</div>
<div slot="btns">
<button @click="deleteSubmit(pars.id)">确认</button>
   
<button @click="deleteClose()">取消</button>
</div>
</modal-pop-box>
</div>
<div class="modal-mask" v-if="promptModal">
<modal-pop-box :ariaLabel="modalName" :ariaShow=true v-if="promptModal" @getPromptModal="getPromptModal">
<div slot="body">
{{desc}}
</div>
<div slot="btns">
<button @click="closePrompt()">OK</button>
</div>
</modal-pop-box>
</div>
</div>
</template>
<script>
import modalPopBox from '../components/modal.vue'
var vm = {
data:function(){
return {
updateModal:false,
deleteModal:false,
promptModal:false,
pars:{
value1:'',
value2:'',
id:0
},
desc:'',
modalName:'',
itemList:{},
parentTotal:0,
parentCurrentPage:1,
parentPagesize:10,
queryParams:{
otherParams:'',
pagesize:10,
pageNum:1
},
}
},
methods:{
update:function(obj){
this.updateModal = true;
this.pars.itemId = parseInt(obj.id);
this.pars.value1 = obj.value1;
this.pars.value2 = obj.value2;
this.modalName = "Update"
},
del:function(idx){
this.deleteModal = true;
this.pars.id = parseInt(idx);
this.modalName = "Delete"
},
updateSubmit:function(idx){
this.pars.id=idx;
this.$http.post('',this.pars,{emulateJSON:true}).then(function(res){
this.updateModal = false;
this.parentCallback(this.queryParams);
},function(res){
this.desc= res.desc;
this.promptModal = true;
}
)
},
deleteSubmit:function(idx){
this.pars.id=idx;
this.$http.post('',this.pars.id,{emulateJSON:true}).then(function(res){
this.deleteModal = false;
this.parentCallback(this.queryParams);
},function(res){
this.desc= 'ajax failure';
this.deleteModal = false;
this.promptModal = true;
this.modalName = "Prompt"
}
)
},
deleteClose:function(){
this.deleteModal = false;
},
getUpdateModal:function(par){
this.updateModal = par;
},
getDeleteModal:function(par){
this.deleteModal = par;
},
getPromptModal:function(par){
this.promptModal = par;
},
closePrompt:function(){
this.promptModal = false;
}
},
beforeCreate:function(){
// 初始化请求一下数据,本例中使用的是本地数据
var res= jsontest2;
var tem = res;
this.itemList = tem.rows;
this.parentTotal = parseInt(tem.total);
},
created:function(){
var _self = this;
_self.parentCallback(_self.queryParams);
},
components:{
modalPopBox
}
}
export default vm
// vm.testhook = 2
</script>
<style>
.modal-mask{
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(100, 100, 100, .5);
display: table;
transition: opacity 1s ease;
}
.buttonCurd{
color:#0000ff;
cursor:pointer;
}
.buttonCurd:hover{
color:#882222;
}
.alignright{
text-align:right;
padding-right:6px;
}
.alignleft{
text-align:left;
}
</style>

  

 

vue 实现modal的更多相关文章

  1. vue 自定义modal 模态框组件

    参数名 类型 说明 visible Boolean 是否显示,默认false title String 标题 update:visible Boolean 更新visible, 使用:visible. ...

  2. vue iview modal弹出框 form表单验证

    一.ref="addApply" :model="addApply" :rules="ruleValidate"   不要忘记prop 二. ...

  3. vue bootstrap中modal对话框不显示遮挡打不开

    使用Vue bootstrap时,点击modal却不能弹出来,被隐藏遮挡无法显示,参考下面的这个博客的说明解决了这个问题: Heap Stack Blog(pingbook.top)Vue boots ...

  4. Vue.js说说组件

    什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTM ...

  5. vue.js笔记

    一.v-bind 缩写 <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> &l ...

  6. Vue开源项目库汇总

    最近做了一个Vue开源项目库汇总,里面集合了OpenDigg 上的优质的Vue开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. UI组件 elem ...

  7. Vue常用经典开源项目汇总参考-海量

    Vue常用经典开源项目汇总参考-海量 Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...

  8. Vue常用开源项目汇总

    前言:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还 ...

  9. vue各种插件汇总

    https://blog.csdn.net/wh8_2011/article/details/80497620(copy) Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一 ...

随机推荐

  1. [vue]通过watch实现数据双向绑定

    modal:单向绑定 <head> <meta charset="UTF-8"> <title>test</title> <s ...

  2. java编写的Http协议的多线程下载器

    断点下载器还在实现中...... //////////////////////////////////界面/////////////////////////////////////////// pac ...

  3. Java Selenium - 几种对话框处理Alert\confirm\prompt

    1. Alert , 先用常规办法定位到能触发alert的按钮 , 然后 Alert alert = driver.switchTo().alert(); alert.accept(); 如果aler ...

  4. Python的Numpy库简述

    numpy 是 python 的科学计算库import numpy as np 1.使用numpy读取txt文件 # dtype = "str":指定数据格式 # delimite ...

  5. 《大道至简》第一章读后感Java伪代码

    在<大道至简>第一章中,周爱民先生引用一则<愚公移山>的寓言,引出了编程的根本:顺序.选择.循环.“愚公移山”的工程虽然庞大,但是可以通过极其简单的变成来完成.我身边的有一些人 ...

  6. web.config或App.config中AttachDBFilenamex相对路径问题

    <add name="employeeManagerConnectionString" connectionString="Data Source=.\SQLExp ...

  7. mysql----------局域网数据库:如何让navicat链接局域网其他的数据库。

    1.找到被链接的数据库,打开以后有一个自带的mysql数据库,打开以后下面有一个user表,把里面的第一条数据的第一个字段改成% 百分号,然后保存,重启数据库,搞定 2.如果是linux下的话,记得把 ...

  8. React项目中使用Mobx状态管理(一)

    1.安装 $ yarn add mobx mobx-react 2.新建store/index.js,存放数据(以下思路仅限于父子组件的简单应用) 注意:这里暂时没使用装饰器@observable,装 ...

  9. react-redux 使用后台数据初始化(渲染)界面

    注:首先在redux中改变state只能通过action操作,reducers改变state 在组件中 store.js import { createStore } from "redux ...

  10. JavaScript-switch-case运用-案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...