ant-design-vue中实现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>

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值