基础用法

smv-modal 支持异步调用,提供了一个将 modal 交互嵌入到业务代码的解决方案。比如,删除一条数据时需要弹出确认框,询问是否确认删除。 点击确认后,发起删除的请求。

一般,我们需要在 view 写 一个 modal。当点击删除按钮时会有一个标识来控制 modal 的显示。modal 显示后,再将用户的操作反馈回来。如果点击确认则,发起删除的 action。

这本来是一个简单的业务流程,但因为跟 view 层有耦合,业务代码被拆得零散。

而使用 smv-modal ,就可以将 modal 嵌入到 action 层,通过 await confirmModal.show() 调用即可。

跟 ant-design 的 Modal.confirm 有异曲同工,不过 smv-modal 直接支持 async/await,且可以将 .vue 文件作为内容。简单的用法如下:

import Vuex from 'vuex';
import Modal from 'smv-modal';

const mockGet = () => {};
const confirmModal = Modal({
  title: 'Confirm',
  modalStyle: {
    width: '400px',
    height: '240px',
  },
  content: 'Do you really want to delete this item?',
});

const store = new Vuex.Store({
  state: {
    count: 0
  },
  actions: {
    async deleteItem (context) {
      const resp = await confirmModal.show();
      if (resp.type === 'confirm') {
        mockGet(`/shop/delete/${context.id}`);
      } else {
        console.log('cancel delete')
      }
    }
  }
})

简写

smv-modal 提供了简写的语法。如果只需要使用 content,title 两个选项时,可以简写如下

const modal = Modal`I'am content`;
modal.show();

简写语法也支持 SFC,更多例子如下:

import ModalContent from './ModalContent.vue';

const modalWithSFC = Modal`${ModalContent}`;
const modalWithTitle = Modal`${'title here'} ${'content here'}`;
const modalWithTitle2 = Modal`${'title here'} ${ModalContent}`;
上次更新: 2018-9-27 03:23:37