zoukankan      html  css  js  c++  java
  • antdesignvue中实现modal模态框的复用(添加,编辑展示同一个模态框)

    用两个button(添加,编辑)按钮展示同一个模态框,并不是什么大问题,问题在于解决这两个模态框得有自己的确定和取消方法

    父页面完全接管子页面(利于子页面复用)

    父页面代码:

    <template>
      <div>
      <-- 定义两个按钮,一个添加按钮, 一个编辑按钮 --> <a-button type="primary" @click="showModal">添加</a-button> <a-button type="primary" @click="showEditModal">编辑</a-button>
      <-- 引入模态框,将modal框的确定和取消方法由此元素触发调用 --> <test-add ref="collectionForm" :visible="visible" @cancel="dialogStatus==='add'?handleCancel():handleEditCancel()" @ok="dialogStatus==='add'?handleOk():handleEditOk()" /> </div> </template> <script> import TestAdd from './modules/TestAdd' export default { components: { TestAdd }, data() { return { dialogStatus:'', visible: false, }; }, watch:{ }, methods: { // 处理添加方法 showModal() { this.visible = true; this.dialogStatus = 'add'; }, handleCancel() { this.visible = false; this.dialogStatus='' console.log('add cancel') }, handleOk(){ console.log('add ok') }, //处理编辑的方法 showEditModal(){ this.type = 'edit'; this.visible = true; }, handleEditCancel(){ this.visible = false; this.dialogStatus = '' console.log('edit cancel') }, handleEditOk(){ this.visible = true; console.log('edit ok') } }, }; </script>

    子页面代码:

    <template>
     <-- 用emit方法触发父级方法,自己本身不需要处理方法 --> 
     <-- 表单校验的时候,可以表单校验成功了之后再去触发父元素方法 -->
    <a-modal :visible="visible" title='Create a new collection' okText='完成' @cancel="() => { $emit('cancel') }" @ok="() => { $emit('ok') }" > <a-form layout='vertical' :form="form"> <a-form-item label='Title'> <a-input v-decorator="[ 'title' ]" /> </a-form-item> <a-form-item label='Description'> <a-input type='textarea' v-decorator="['description']"/> </a-form-item> <a-form-item class='collection-create-form_last-form-item'> <a-radio-group v-decorator="['modifier',{initialValue: 'private'}]"> <a-radio value='public'>Public</a-radio> <a-radio value='private'>Private</a-radio> </a-radio-group> </a-form-item> </a-form> </a-modal> </template> <script> export default { name: 'TestAdd', props: ['visible'], data () { return { form: this.$form.createForm(this) } } } </script> <style scoped> </style>

    使用上面这种方式,子页面基本上不需要处理什么业务逻辑,所有方法都由父页面实现,这样就可以把子页面随意引用到其他地方去使用,也是官方文档中的样例。

     

    有疑问或者问题,请留言,本人常在回复比较及时。
    作者:Cirry
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Gin框架介绍与使用
    Go并发编程(goroutine)
    Go语言操作数据库及其常规操作
    Julia语言程序基础
    GoLang字符串处理
    在PHP7以上版本使用不了mysql扩展
    Docker基础命令
    Odoo14_Tree视图自定义按钮和自定义面板
    Odoo13_自定义客户端页面
    python_读取.xlsx(电子表格)文件
  • 原文地址:https://www.cnblogs.com/cirry/p/12491989.html
Copyright © 2011-2022 走看看