1 <template> 2 <div class="main"> 3 <div :class="{dialog:propsItem.rgba}" v-if="propsItem.isMask"> 4 <div class="content" v-bind:style="propsItem.widthHeight"> 5 <span class="close big" @click="close">X</span> 6 <h1 class="title">{{propsItem.title}}</h1> 7 <hr class="hr1"> 8 <div class="mainContent"> 9 {{propsItem.contents}} 10 <slot></slot> 11 </div> 12 <hr class="hr1"> 13 <input type="button" class="ok" :value="propsItem.ok" @click="okCallback"> 14 <input type="button" class="cancel" :value="propsItem.cancel" @click="cancelCallback"> 15 </div> 16 </div> 17 </div> 18 </template> 19 20 <script> 21 export default { 22 name:‘dialog1‘, 23 props:{ 24 // 接受父组件传的值 25 propsItem:{ 26 type:Object 27 } 28 }, 29 data(){ 30 return { 31 32 } 33 }, 34 methods:{ 35 close(){ 36 this.propsItem.isMask = false 37 }, 38 okCallback(){ 39 this.$emit(‘child-ok‘) 40 this.propsItem.isMask = false 41 }, 42 cancelCallback(){ 43 this.$emit(‘child-cancel‘) 44 this.propsItem.isMask = false 45 } 46 } 47 } 48 </script> 49 50 <style lang="less" scoped> 51 @position:absolute; 52 .alignCtener(@width,@height,@bgcolor){ 53 position:@position; 54 top:50%; 55 left:50%; 56 transform:translate(-50%,-50%); 57 background-color: @bgcolor; 58 width: @width; 59 height: @height; 60 border-radius: 4%; 61 } 62 .hr1{ 63 position: relative; 64 width: 100%; 65 border:1px solid #cccccc; 66 } 67 .mainContent{ 68 width: 100%; 69 height: 65%; 70 overflow-y: scroll; 71 margin-bottom: 5%; 72 } 73 .dialog{ 74 background-color: rgba(0,0,0,0.8); 75 position:absolute; 76 top: 0; 77 left:0; 78 width: 100%; 79 height: 100%; 80 } 81 .close.big { 82 -webkit-transform: scale(2); 83 -moz-transform: scale(2); 84 -ms-transform: scale(2); 85 -o-transform: scale(2); 86 transform: scale(2); 87 } 88 .close{ 89 position: absolute; 90 display: inline-block; 91 overflow: hidden; 92 right: 20px; 93 top:20px; 94 color:#000; 95 } 96 .content{ 97 .alignCtener(500px,500px,#fff); 98 padding: 30px; 99 z-index: 999; 100 text-align: left; 101 box-shadow:5px 5px 13px #ccc; 102 } 103 .cancel,.ok{ 104 position: absolute; 105 bottom: 10px; 106 right: 10px; 107 } 108 .ok{ 109 right:100px; 110 } 111 </style>
1 <template> 2 <div> 3 <h1 class="title">标题</h1> 4 <p>内容</p> 5 <input type="button" value="确认框" @click="clickBtn"> 6 <Dialog v-if="isMask" :propsItem="propsItem" @child-ok="childok" @child-cancel="childcancel"></Dialog> 7 </div> 8 </template> 9 10 <script> 11 import Dialog from ‘./Dialog‘ 12 export default { 13 name:"d1demo", 14 data(){ 15 return { 16 isMask:false, 17 propsItem:{ 18 title:‘标题‘, 19 contents:‘ccccc‘, 20 ok:‘确认‘, 21 cancel:‘取消‘, 22 isMask:true, 23 rgba:false, 24 widthHeight:{ 25 width:‘300px‘, 26 height:‘300px‘ 27 } 28 } 29 } 30 }, 31 components:{ 32 Dialog 33 }, 34 methods:{ 35 clickBtn(){ 36 this.propsItem.isMask = this.isMask = true 37 }, 38 childok(){ 39 alert(‘xxx‘) 40 }, 41 childcancel(){ 42 } 43 } 44 } 45 </script> 46 47 <style lang="less" scoped> 48 49 </style>
<template> <div> <input type="button" value="dialog" @click="clickBtn"> <Dialog v-if="isMask" v-bind:propsItem="propsItem" @child- ok="childok" @child-cancel="childcancel"> <template> <D1></D1> </template> </Dialog> </div> </template> <script> import Dialog from ‘./components/Dialog‘ import D1 from ‘./components/d1‘ export default { name: "App", components: { Dialog, D1 }, data() { return { isMask:false, propsItem:{ title:‘我是dialog标题‘, contents:‘我是dialog内容‘, ok:‘我是确认按钮‘, cancel:‘我是取消按钮‘, isMask:true, rgba:true } }; }, methods:{ clickBtn(){ this.propsItem.isMask = this.isMask = true }, childok(){ alert(‘xxx‘) }, childcancel(){ } } }; </script> <style lang="less"> </style>
原文:https://www.cnblogs.com/z-j-c/p/12983343.html