vue2.X 自定义 模态框 modal
1.自定义 modal
Modal.vue
<!-- 模态框 -->
<template>
<div class="modal-mask" v-show="value" transition="modal">
<div class="modal-wrapper">
<div class="modal-container">
<!-- 头部 -->
<div class="modal-header">
<slot name="header"></slot>
</div>
<!-- 内容部分 -->
<div class="modal-body">
<span>起床</span><mt-switch></mt-switch>
</div> <div class="modal-body">
<span>吃饭</span><mt-switch></mt-switch>
</div> <div class="modal-body">
<span>集合</span><mt-switch></mt-switch>
</div> <div class="modal-body">
<span>加工车间</span><mt-switch></mt-switch>
</div>
<!-- 底部 -->
<div class="modal-footer">
<mt-button type="danger" @click="cancel">取消</mt-button> <mt-button type="primary" @click="confirm">确定</mt-button>
</div>
</div>
</div>
</div>
</template> <script>
export default {
props: {
show: {
type: Boolean,
default: false
}
},
data(){
return{
value: false
}
},
mounted(){
this.value = this.show;
},
// 监听show数值的变化
watch:{
show:{
handler:function(val,oldval){
this.value = val;
}
}
},
methods:{
cancel(){
this.value = false;
// 向父组件传值
this.$emit('listenToChildEvent',this.value);
},
confirm(){
this.value = false;
// 向父组件传值
this.$emit('listenToChildEvent',this.value);
}
}
}
</script> <style lang="less" scoped>
.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: 70%;
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;
border-bottom: 1px solid #ddd;
span{
display: inline-block;
height: 40px;
line-height: 40px;
width: 60%;
vertical-align: middle;
}
label{
width: 30%;
display: inline-block;
vertical-align: middle;
}
} .modal-footer{
text-align: center;
} .modal-default-button {
float: right;
} .modal-enter, .modal-leave {
opacity: 0;
} .modal-enter .modal-container,
.modal-leave .modal-container {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
</style>
解释:
(1)通过 watch 监听 子组件的数据变化
(2)通过 $emit 子组件 向 父组件 传值
2.父组件 调用
father.vue
<template>
<div>
<button @click="showType"></button>
<!-- 模态框 -->
<m-modal :show="showModal" v-on:listenToChildEvent="setModal">
<h3 slot="header">类型选择</h3>
</m-modal>
</div>
</template> <script>
// 引入 模态框组件
import mModal from '../../components/Modal' export default {
components: {
mModal
},
data(){
return{
// 默认值
showModal:false
}
},
methods: {
// 点击按钮
showType(){
this.showModal = true;
},
// 接收子组件的传值,并更改父组件的数据
setModal(data){
this.showModal = data;
}
}
}
</script> <style lang="less" scoped> </style>
解释:
(1)通过 :show="showModal" 父组件 向 子组件 传值
(2)通过 v-on:listenToChildEvent="setModal" 父组件 接收 子组件 的值
3.效果图

vue2.X 自定义 模态框 modal的更多相关文章
- bootstrap模态框modal使用remote第二次加载显示相同内容解决办法
bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法 bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 ...
- Bootstrap(v3.2.0)模态框(modal)垂直居中
Bootstrap(v3.2.0)模态框(modal)垂直居中方法: 在bootstrap.js文件900行后面添加如下代码,便可以实现垂直居中. that.$element.children().e ...
- 模态框 modal data-toggle data-target
模态框 modal data-toggle data-target 1. Data-*属性 模态框(modal) 触发事件(data-toggle) 触发对象data-target(ID 或类) ...
- Bootstrap历练实例:模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,其目的是显示来自一个单独源的内容,可以在不离开父窗体的情况下进行一些交互,子窗体提供一些交互或信息. <!DOCTYPE html>&l ...
- Bootstrap3模态框Modal垂直居中样式
1,Bootstrap 模态框插件Bootbox垂直居中样式: <!DOCTYPE html> <html lang="en"> <head> ...
- 黄聪:bootstrap中模态框modal在苹果手机上会失效
bootstrap中模态框在苹果手机上会失效 可将代码修改为<a data-toggle="modal" data-target="#wrap" hre ...
- 模态框MODAL的一些事件捕捉
下表列出了模态框中要用到事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.modal 在调用 show 方法后触发. $('#identifier').on('show.bs.m ...
- Bootstrap使用模态框modal实现表单提交弹出框
Bootstrap 模态框(Modal)插件 模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等.如果 ...
- Bootstrap多层模态框modal嵌套问题
一.问题 在项目里忽然新加了一个需求,在原本弹出的模态框里,点击模态框里面的按钮再弹出一个模态框,出来另个模态框来展示详细信息.此时就存在两个模态框在这个需求没加之前有一个弹出的模态框也是需要继续点击 ...
随机推荐
- [ZJOI2012][bzoj 2816] 网络 network [LCT]
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2816 思路: 第一个条件看完暂时还没什么想法 看完第二个,发现每一个颜色都是一个森林 进而想 ...
- centos安装arm交叉工具链后常见的问题解决
[root@localhost osdrv]# arm-hisiv400-linux-gcc -vbash: /opt/hisi-linux/x86-arm/arm-hisiv400-linux/ta ...
- Codeforces Round #316 (Div. 2) B 贪心
B. Simple Game time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- js数据类型判断
在一般情况下使用typeof 但是有时候typeof返回的结果都是object,比如数组和json对象的时候,这个时候需要用到 instanceof了 还有一个更好得办法,Object.prototy ...
- ThreadPool怎样判断子线程全部执行完毕
原文发布时间为:2010-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 1、先来看看这个 http://hi.baidu.com/handboy/blog/item/160e9697fd ...
- config .net webapi to return json.
1.add content negotiator using System; using System.Collections.Generic; using System.Linq; using Sy ...
- .net web api返回结果为json
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面为大家介绍几种不错的方法 web api写api接口时默认返回的是把你的对象序列化后以 ...
- jdk、maven、tomcat环境变量配置
1.jdk 新建环境变量: JAVA_HOME:C:\Program Files\Java\jdk1.8.0_91 CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\li ...
- 宝宝舌苔发白,消化不好 http://wenwen.soso.com/z/q103192661.htm
你好,宝宝咳嗽,如果舌苔是白的,则是风寒咳嗽,说明孩子寒重,咳嗽的痰也较稀.白黏,并兼有鼻塞流涕,这时应吃一些温热.化痰止咳的食品.如果孩子的舌苔是黄.红,则是风热咳嗽,说明孩子内热较大,咳嗽的痰黄. ...
- Python Challenge 第十关
第十关是一张牛的图片和一行字:len(a[30])=?.图片中的牛是一个链接,点开后进入一个新页面,只有一行字: a = [1, 11, 21, 1211, 111221, 看来要知道第31个数多长, ...