zoukankan      html  css  js  c++  java
  • 父组件如何向子组件方法(对话框的封装)

    示例如下:

    子组件:

      1 <template>
      2   <div>
      3     <transition name="drop">
      4       <!--遮罩层开始-->
      5       <div class="dialog-mask" v-show="dialogData.isShow">
      6         <!--对话框开始-->
      7         <div class="dialog" id="dialog">
      8           <!--对话框标题开始-->
      9           <div class="dialog-title modal-header">
     10             <p>{{dialogData.title}}</p>
     11             <span class="close" @click="dialogData.btnText[1].method">&times;</span>
     12           </div>
     13           <!--对话框内容-->
     14           <div class="dialog-content">
     15             <slot name="content"></slot>
     16           </div>
     17           <!--对话框底部-->
     18           <div class="dialog-bottom">
     19               <button :class="index==0? 'btn btn-primary':'btn btn-default'" v-for="(btnt,index) in dialogData.btnText" @click="btnt.method">{{btnt.text}}</button>
     20           </div>
     21         </div>
     22         <!--对话框结束-->
     23       </div>
     24       <!--遮罩层结束-->
     25     </transition>
     26 
     27   </div>
     28 </template>
     29 <style scoped>
     30   .drop-enter-active,.drop-leave-active{
     31     transition: all .5s ease;
     32   }
     33   .drop-enter,.drop-leave-to{
     34     opacity: 0;
     35   }
     36   .dialog-mask{
     37     position: fixed;
     38     left:0;
     39     top:0;
     40     width:100%;
     41     height: 100%;
     42     z-index: 1000;
     43     background: rgba(0,0,0,0.2);
     44   }
     45   .dialog{
     46     width:50%;
     47     height:50%;
     48     position: fixed;
     49     left:25%;
     50     top:25%;
     51   }
     52   .dialog-title{
     53     width:100%;
     54     height:18%;
     55     border-top-left-radius:8px;
     56     border-top-right-radius:8px;
     57     display: table;
     58   }
     59   .dialog-title p{
     60     display: table-cell;
     61     text-align: center;
     62     vertical-align: middle;
     63   }
     64   .dialog-title span{
     65     position: absolute;
     66     right: 3%;
     67   }
     68   .dialog-content{
     69     width:100%;
     70     height:66%;
     71     background: #fff;
     72   }
     73   .dialog-bottom{
     74     width:100%;
     75     height:16%;
     76     border-top:1px solid #E5E5E5;
     77     border-bottom-left-radius:8px;
     78     border-bottom-right-radius:8px;
     79     background: #fff;
     80     position: relative;
     81   }
     82   .btn{
     83     padding:.5%  3%;
     84   }
     85   .dialog-bottom >button:nth-child(1){
     86     position: absolute;
     87     left:38%;
     88     top:25%;
     89   }
     90   .dialog-bottom >button:nth-child(2){
     91     position: absolute;
     92     left:50%;
     93     top:25%;
     94   }
     95 </style>
     96 <script>
     97   export default{
     98     props:{
     99       'dialogData':{
    100         type:Object
    101       }
    102 
    103     }
    104   }
    105 </script>

    父组件:

     1 <template>
     2     <div id="all">
     3       <my-dialog :dialogData = dialogData>
     4         <div slot="content">我是对话框内容</div>
     5       </my-dialog>
     6     </div>
     7 </template>
     8 <style scoped>
     9   #all{
    10     width:100%;
    11     height:100%;
    12   }
    13 
    14 </style>
    15 <script>
    16   import myDialog from './dialog.vue'
    17 
    18     export default{
    19         data(){
    20             return {
    21               dialogData:{
    22                 title:"提示",
    23                 isShow:true,
    24                 btnText:[
    25                   {"text":"确定","method":this.sure},
    26                   {"text":"取消","method":this.close}
    27                 ]
    28               }
    29             }
    30         },
    31         methods:{
    32           sure(){
    33             alert("确定");
    34           },
    35           close(){
    36             alert("取消");
    37             this.dialogData.isShow = false;
    38           }
    39         },
    40 
    41         components: {
    42           myDialog
    43         }
    44     }
    45 </script>
  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/yuwenjing0727/p/7346125.html
Copyright © 2011-2022 走看看