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

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. 【剑指offer】二叉搜索树与双向链表

    一.题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二.思路: 对于一棵搜索二叉树来说,中序遍历得到的即是有序的结果,所以整 ...

  2. HTML中--定义header和footer高度中间自适应

    <html> <head> <meta charset="utf-8" /> <title></title> <s ...

  3. [转]如何快速转载CSDN中的博客

    原文:https://blog.csdn.net/bolu1234/article/details/51867099 前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时 ...

  4. Marathon自动扩缩容(marathon-lb-autoscale)

    我们在服务里面创建如下的应用(以下是创建完复制过来的json): { "id": "/nginxtest", "cmd": null, &q ...

  5. sort(排序) qsort(快排) bsearch(二分查找)

    sort: 一.对int类型数组排序 int a[100]; int cmp ( int a , int b ) //不必强制转换 { return a < b;//升序排列. } sort ( ...

  6. SJW-遍历我的账户左侧导航页面(句柄切换)

    页面信息类似如下: 定位页面元素: import time from selenium import webdriver # import os #A #username = "182007 ...

  7. node 图片验证码生成

    var captchapng = require('captchapng'); var http = require("http") var server = http.creat ...

  8. 命令行方式调用winrar对文件夹进行zip压缩示例代码

    调用winRAR进行压缩 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  9. Http 服务 简单示例

    现在我们实现一个GO的Web http服务 只做演示,没有实际功能 但是能看出Go做Http服务的简洁 **************************************** package ...

  10. Go linux 实践2

    今天,看看GO的高级语言特性-方法和接口 废话不多说,直接上代码 ************************************************* 1 package main 2 ...