js封装弹框

一、配置项

为modal提供配置项:

  • 标题title
  • 是否展示关闭按钮showClose
  • 弹框内容content
  • 是否展示取消按钮showCancel
  • 是否展示确认按钮showConfirm
  • 取消按钮的文本cancelText
  • 确认按钮的文本confirmText
  • 弹框宽度width
  • 取消事件onCancel
  • 确认事件onConfirm

对于没有出入的配置项,使用默认值。

二、封装弹框modal.js

弹框分标题区、内容区、操作区三部分,主要包含标题、关闭按钮、展示内容、确定/取消事件

class Modal {
  constructor(options) {
    this.options = Object.assign(
      {
        title: "标题",
        showClose: true,
        content: "",
        showCancel: true,
        showConfirm: true,
        cancelText: "取消",
        confirmText: "确定",
        width: "480px",
        onCancel: () => {
          this.closeModal();
        },
        onConfirm: () => {
          this.confirmModal;
        },
      },
      options
    );
  }
  init() {
    let maskDom = document.createElement("div");
    maskDom.className = "el-overlay";
    let dialogDom = document.createElement("div");
    dialogDom.className = "el-dialog";
    dialogDom.style = "width:" + this.options.width;
    let headerDom = document.createElement("div");
    headerDom.className = "el-dialog__header";
    this.createHeader(headerDom);
    let bodyDom = document.createElement("div");
    bodyDom.className = "el-dialog__body";
    this.createBody(bodyDom);
    let footerDom = document.createElement("div");
    footerDom.className = "el-dialog__footer";
    this.createFooter(footerDom);
    dialogDom.appendChild(headerDom);
    dialogDom.appendChild(bodyDom);
    dialogDom.appendChild(footerDom);
    maskDom.appendChild(dialogDom);
    document.body.appendChild(maskDom);
  }
  createHeader(headerDom) {
    let titleDom = document.createElement("span");
    titleDom.className = "el-dialog__title";
    titleDom.innerText = this.options.title;
    headerDom.appendChild(titleDom);
    if (this.options.showClose) {
      let closeDom = document.createElement("button");
      closeDom.className = "el-dialog__headerbtn";
      closeDom.type = 'button';
      closeDom.onclick = this.options.onCancel;
      closeDom.innerHTML = '<i class="el-dialog__close el-icon el-icon-close"></i>';
      headerDom.appendChild(closeDom);
    }
  }
  createBody(bodyDom) {
    bodyDom.innerHTML = this.options.content;
  }
  createFooter(footerDom) {
    if (this.options.showCancel) {
      let cancelDom = document.createElement("button");
      cancelDom.className = "el-button el-button--default el-button--mini";
      cancelDom.type = "button";
      cancelDom.innerText = this.options.cancelText;
      cancelDom.onclick = this.options.onCancel;
      footerDom.appendChild(cancelDom);
    }
    if (this.options.showConfirm) {
      let confirmDom = document.createElement("button");
      confirmDom.className = "el-button el-button--primary el-button--mini";
      confirmDom.type = "button";
      confirmDom.innerText = this.options.confirmText;
      confirmDom.onclick = this.options.onConfirm;
      footerDom.appendChild(confirmDom);
    }
  }
  closeModal() {
    console.log('closeModal');
    document.body.removeChild(document.getElementsByClassName("el-overlay")[0]);
  }
  confirmModal() {
    console.log("confirm");
    document.body.removeChild(document.getElementsByClassName("el-overlay")[0]);
  }
}

使用modal.js

new Modal({})

        以index.html为例:

<script src="./js/modal.js"></script>
    function openModal() {
      modal = new Modal({
        title: "温馨提示",
        showClose: true,
        content:
          '<label style="display: block;padding:16px 0 8px 0;font-weight: bold;line-height:20px;">账号</label>' +
          '<div class="el-input">' +
          '<input class="el-input__inner" type="text" name="name" style="background:#F4F6F8;border:none;">' +
          "</div>" +
          '<label style="display: block;padding:16px 0 8px 0;font-weight: bold;line-height:20px;">密码</label>' +
          '<div class="el-input">' +
          '<input class="el-input__inner" type="text" name="pwd" style="background:#F4F6F8;border:none;">' +
          "</div>",
        showCancel: false,
        showConfirm: true,
        confirmText: "保存",
        width: "480px",
        onConfirm: () => {
          save();
        },
      });
      modal.init();
    }
    function save() {
      let name = document.getElementsByName("name")[0].value;
      let pwd = document.getElementsByName("pwd")[0].value;
      if (!key || !secret) {
        messageTip('请输入账号和密码');
        return;
      }
      let params = {
        name,
        pwd,
      };
      console.log(params);
      modal.closeModal();
      modal = null;
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Vue应用程序中实现全局框的控制,你可以使用Vue.js提供的全局事件总线(Event Bus)机制。 以下是一个简单的实现: 1.在Vue实例中创建一个事件总线: ``` // main.js import Vue from 'vue' export const EventBus = new Vue() ``` 2.在需要出框的组件中,通过事件总线触发一个事件: ``` // MyComponent.vue import { EventBus } from '@/main' methods: { showModal () { EventBus.$emit('show-modal') } } ``` 3.在包含出框的组件中,监听事件并控制出框的显示与隐藏: ``` // ModalComponent.vue import { EventBus } from '@/main' data () { return { showModal: false } }, created () { EventBus.$on('show-modal', () => { this.showModal = true }) }, methods: { closeModal () { this.showModal = false } } ``` 通过这种方式,你可以在任何组件中触发事件并控制全局出框的显示与隐藏。当然,你也可以通过传递参数来实现更复杂的逻辑。 ### 回答2: Vue全局JS控制主要包括以下几个步骤: 第一步,导入Vue和第三方框插件,可以使用import语句导入。 第二步,创建一个Vue实例,用于管理全局框相关的数据和方法。 第三步,定义全局框的属性和方法,如框的显示状态、标题、内容、确认按钮、取消按钮等。 第四步,将全局框挂载到Vue实例上,并使用Vue的插件机制将该实例注册为全局组件。 第五步,使用组件的方式来调用全局框,可以直接在Vue实例中使用该组件,或者通过事件触发、计算属性、方法等方式来控制框的显示和隐藏。 第六步,根据实际需求,可以在全局框中添加一些自定义配置项,如框的宽度、高度、位置等。 第七步,封装全局框的方法,使其支持链式调用,方便在代码中使用。 第八步,对全局框的样式进行自定义,可以通过CSS样式文件或者内联样式灵活地修改框的样式。 总而言之,通过上述步骤,我们可以在Vue中实现全局框的JS控制,方便在整个项目中管理和调用框组件,提高开发效率和代码复用性。 ### 回答3: Vue全局JS控制是通过Vue.js的全局对象$emit和$on来实现的。为了实现统一的框控制,可以借助Vue的事件总线机制。 首先,在main.js中创建一个Vue实例,作为事件总线: ``` import Vue from 'vue' export const EventBus = new Vue() Vue.prototype.$bus = EventBus ``` 然后,在需要框的组件中,可以通过以下方式触发一个全局事件: ``` this.$bus.$emit('show-dialog', dialogData) ``` 其中,'show-dialog'是自定义的事件名称,dialogData是传递给框的数据。 接着,在根组件或全局组件中监听该事件,并根据需求进行处理。可以通过以下方式在组件中监听事件: ``` this.$bus.$on('show-dialog', (dialogData) => { // 处理框逻辑,比如出一个全局框组件,并将dialogData传递给它 }) ``` 在监听到事件后,在组件中进行相应的处理,比如将dialogData传递给全局框组件,并出。 通过以上步骤,就可以实现Vue全局框的控制了。无论在哪个组件中需要框,只需要触发全局事件,然后在根组件或全局组件中进行监听和处理,实现了框的统一控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值