• Dialog 对话框


    在保留当前页面状态的情况下,告知用户并承载相关操作。

    基本用法

    Dialog 弹出一个对话框,适合需要定制性更大的场景。

    需要设置visible属性,它接收Boolean,当为true时显示 Dialog。Dialog 分为两个部分:bodyfooterfooter需要具名为footerslottitle属性用于定义标题,它是可选的,默认值为空。最后,本例还展示了before-close的用法。

     1 <el-button type="text" @click="dialogVisible = true">点击打开 Dialog</el-button>
     2 
     3 <el-dialog
     4   title="提示"
     5   :visible.sync="dialogVisible"
     6   width="30%"
     7   :before-close="handleClose">
     8   <span>这是一段信息</span>
     9   <span slot="footer" class="dialog-footer">
    10     <el-button @click="dialogVisible = false">取 消</el-button>
    11     <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
    12   </span>
    13 </el-dialog>
    14 
    15 <script>
    16   export default {
    17     data() {
    18       return {
    19         dialogVisible: false
    20       };
    21     },
    22     methods: {
    23       handleClose(done) {
    24         this.$confirm('确认关闭?')
    25           .then(_ => {
    26             done();
    27           })
    28           .catch(_ => {});
    29       }
    30     }
    31   };
    32 </script>
    View Code

    before-close 仅当用户通过点击关闭图标或遮罩关闭 Dialog 时起效。如果你在 footer 具名 slot 里添加了用于关闭 Dialog 的按钮,那么可以在按钮的点击回调函数里加入 before-close 的相关逻辑。

    自定义内容

    Dialog 组件的内容可以是任意的,甚至可以是表格或表单,下面是应用了 Element Table 和 Form 组件的两个样例。

     1 <!-- Table -->
     2 <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
     3 
     4 <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
     5   <el-table :data="gridData">
     6     <el-table-column property="date" label="日期" width="150"></el-table-column>
     7     <el-table-column property="name" label="姓名" width="200"></el-table-column>
     8     <el-table-column property="address" label="地址"></el-table-column>
     9   </el-table>
    10 </el-dialog>
    11 
    12 <!-- Form -->
    13 <el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>
    14 
    15 <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
    16   <el-form :model="form">
    17     <el-form-item label="活动名称" :label-width="formLabelWidth">
    18       <el-input v-model="form.name" auto-complete="off"></el-input>
    19     </el-form-item>
    20     <el-form-item label="活动区域" :label-width="formLabelWidth">
    21       <el-select v-model="form.region" placeholder="请选择活动区域">
    22         <el-option label="区域一" value="shanghai"></el-option>
    23         <el-option label="区域二" value="beijing"></el-option>
    24       </el-select>
    25     </el-form-item>
    26   </el-form>
    27   <div slot="footer" class="dialog-footer">
    28     <el-button @click="dialogFormVisible = false">取 消</el-button>
    29     <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
    30   </div>
    31 </el-dialog>
    32 
    33 <script>
    34   export default {
    35     data() {
    36       return {
    37         gridData: [{
    38           date: '2016-05-02',
    39           name: '王小虎',
    40           address: '上海市普陀区金沙江路 1518 弄'
    41         }, {
    42           date: '2016-05-04',
    43           name: '王小虎',
    44           address: '上海市普陀区金沙江路 1518 弄'
    45         }, {
    46           date: '2016-05-01',
    47           name: '王小虎',
    48           address: '上海市普陀区金沙江路 1518 弄'
    49         }, {
    50           date: '2016-05-03',
    51           name: '王小虎',
    52           address: '上海市普陀区金沙江路 1518 弄'
    53         }],
    54         dialogTableVisible: false,
    55         dialogFormVisible: false,
    56         form: {
    57           name: '',
    58           region: '',
    59           date1: '',
    60           date2: '',
    61           delivery: false,
    62           type: [],
    63           resource: '',
    64           desc: ''
    65         },
    66         formLabelWidth: '120px'
    67       };
    68     }
    69   };
    70 </script>
    View Code

    嵌套的 Dialog

    如果需要在一个 Dialog 内部嵌套另一个 Dialog,需要使用 append-to-body 属性。

    正常情况下,我们不建议使用嵌套的 Dialog,如果需要在页面上同时显示多个 Dialog,可以将它们平级放置。对于确实需要嵌套 Dialog 的场景,我们提供了append-to-body属性。将内层 Dialog 的该属性设置为 true,它就会插入至 body 元素上,从而保证内外层 Dialog 和遮罩层级关系的正确。

     1 <template>
     2   <el-button type="text" @click="outerVisible = true">点击打开外层 Dialog</el-button>
     3   
     4   <el-dialog title="外层 Dialog" :visible.sync="outerVisible">
     5     <el-dialog
     6       width="30%"
     7       title="内层 Dialog"
     8       :visible.sync="innerVisible"
     9       append-to-body>
    10     </el-dialog>
    11     <div slot="footer" class="dialog-footer">
    12       <el-button @click="outerVisible = false">取 消</el-button>
    13       <el-button type="primary" @click="innerVisible = true">打开内层 Dialog</el-button>
    14     </div>
    15   </el-dialog>
    16 </template>
    17 
    18 <script>
    19   export default {
    20     data() {
    21       return {
    22         outerVisible: false,
    23         innerVisible: false
    24       };
    25     }
    26   }
    27 </script>
    View Code

    居中布局

    标题和底部可水平居中

    将 center 设置为 true 即可使标题和底部居中。

     1 <el-button type="text" @click="centerDialogVisible = true">点击打开 Dialog</el-button>
     2 
     3 <el-dialog
     4   title="提示"
     5   :visible.sync="centerDialogVisible"
     6   width="30%"
     7   center>
     8   <span>需要注意的是内容是默认不居中的</span>
     9   <span slot="footer" class="dialog-footer">
    10     <el-button @click="centerDialogVisible = false">取 消</el-button>
    11     <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
    12   </span>
    13 </el-dialog>
    14 
    15 <script>
    16   export default {
    17     data() {
    18       return {
    19         centerDialogVisible: false
    20       };
    21     }
    22   };
    23 </script>
    View Code

    center 仅影响标题和底部区域。Dialog 的内容是任意的,在一些情况下,内容并不适合居中布局。如果需要内容也水平居中,请自行为其添加 CSS。

    如果 visible 属性绑定的变量位于 Vuex 的 store 内,那么 .sync 不会正常工作。此时需要去除 .sync 修饰符,同时监听 Dialog 的 open 和 close 事件,在事件回调中执行 Vuex 中对应的 mutation 更新 visible 属性绑定的变量的值。

    Attributes

    参数说明类型可选值默认值
    visible 是否显示 Dialog,支持 .sync 修饰符 boolean false
    title Dialog 的标题,也可通过具名 slot (见下表)传入 string
    width Dialog 的宽度 string 50%
    fullscreen 是否为全屏 Dialog boolean false
    top Dialog CSS 中的 margin-top 值 string 15vh
    modal 是否需要遮罩层 boolean true
    modal-append-to-body 遮罩层是否插入至 body 元素上,若为 false,则遮罩层会插入至 Dialog 的父元素上 boolean true
    append-to-body Dialog 自身是否插入至 body 元素上。嵌套的 Dialog 必须指定该属性并赋值为 true boolean false
    lock-scroll 是否在 Dialog 出现时将 body 滚动锁定 boolean true
    custom-class Dialog 的自定义类名 string
    close-on-click-modal 是否可以通过点击 modal 关闭 Dialog boolean true
    close-on-press-escape 是否可以通过按下 ESC 关闭 Dialog boolean true
    show-close 是否显示关闭按钮 boolean true
    before-close 关闭前的回调,会暂停 Dialog 的关闭 function(done),done 用于关闭 Dialog
    center 是否对头部和底部采用居中布局 boolean false

    Slot

    name说明
    Dialog 的内容
    title Dialog 标题区的内容
    footer Dialog 按钮操作区的内容

    Events

    事件名称说明回调参数
    close Dialog 关闭的回调
    open Dialog 打开的回调
     
  • 相关阅读:
    位运算简介以及常用技巧
    JMeter 十六:加密处理
    JMeter 十五:函数以及变量
    JMeter 十四:最佳实践
    JMeter 十三:生成 report dashboard
    JMeter 十二:命令行执行
    JMeter 十一:参数化
    JMeter 十:录制脚本--使用bodboy
    LoadRunner录制:检查点
    LoadRunner录制: 选择协议
  • 原文地址:https://www.cnblogs.com/grt322/p/8564454.html
Copyright © 2020-2023  润新知