推广

Vue.extend创建动态组件的应用

iseeyu2年前 (2024-02-21)推广121

弹窗

然后我在想,能不能自己也封装一个这种组件,不用每次都import事先写好的组件,能全局调用呢?正好工作中做到一个删除确认框的功能,就研究了一下。

一、创建一个组件(deleteconfirm.vue)

<template>
  <a-modal
    :title="null"
    width="416px"
    :bodyStyle="{ padding: '0px' }"
    :visible="visible"
    :confirm-loading="confirmLoading"
    okType="danger"
    okText="删除"
    :closable="false"
    @ok="handleOk"
    @cancel="handleCancel"
  >
    <div class="delete-confirm-wrap">
      <div class="title-wrap mb10">
        <a-icon
          class="mr10"
          type="exclamation-circle"
          theme="filled"
          :style="{ color: '#f9ad15' }"
        />
        <span class="confirm-title">{{ title }}</span>
      </div>
      <div class="warning-title mb10">
        删除后相关数据一并删除,此操作不可逆!
      </div>
      <div class="confirm-tip mb10">如确认删除,请输入:{{ validateText }}</div>
      <a-input
        class="flex-one"
        :placeholder="placeholder"
        v-model="userInputText"
      />
    </div>
  </a-modal>
</template>
<script>
export default {
  name: "deleteConfirm",
  props: {
    title: {
      type: String,
      default: "您确定要删除吗?",
    },
    placeholder: {
      type: String,
      default: "",
    },
    validateText: {
      type: String,
      default: "",
    },
    onOk: {
      type: Function,
      default() {
        return () => {};
      },
    },
    onCancel: {
      type: Function,
      default() {
        return () => {};
      },
    },
  },
  data() {
    return {
      //是否显示
      visible: false,
      //确定Loading
      confirmLoading: false,
      //用户输入的确认文案
      userInputText: "",
    };
  },
  computed: {},
  methods: {
    //点击确定按钮
    async handleOk() {
      //点确定之前校验用户输入的与需要校验的文案是不是一致
      if (this.userInputText !== this.validateText) {
        this.$message.error("输入错误");
        return;
      }
      this.confirmLoading = true;
      //回调用户函数
      await this.onOk(this.userInputText);
      this.confirmLoading = false;
      this.visible = false;
    },
    //取消按钮
    handleCancel() {
      this.onCancel("cancel");
      this.visible = false;
    },
  },
};
</script>

<style lang="scss" scoped>
.delete-confirm-wrap {
  border-radius: 6px;
  height: 170px;
  padding: 24px;
  .title-wrap {
    font-weight: 500;
    font-size: 16px;
    display: flex;
    align-items: center;
  }
  .warning-title {
    color: #ff4d4f;
  }
  .confirm-tip {
    color: #8591a1;
  }
}
</style>

二、在该组件同目录下新建index.js

import Vue from 'vue'
//导入组件
import deleteConfirmComp from './deleteconfirm'
//创建构造函数
const deleteConfirmConstructor = Vue.extend(deleteConfirmComp);
//构建删除方法
const deleteConfirm = (options = {}) => {
    //动态实例化组件
    let instance = new deleteConfirmConstructor({
        //此处针对子组件的props进行合并覆盖
        propsData: {
            ...options
        }
    });
    //挂载实例渲染
    instance.$mount();
    //绑定到body上
    document.body.appendChild(instance.$el);
    //显示出弹窗
    instance.visible = true;
}
//导出该方法
export default deleteConfirm;

三、在main.js中挂载deleteConfirm方法到Vue原型对象上,以便能够全局调用该方法

import Vue from 'vue'
import deleteConfirm from "./components/deleteconfirm/index";
Vue.prototype.$confirm = deleteConfirm;
...

四、使用

this.$confirm({
        title: `确定要删除「我叫你一声」吗?`,
        placeholder: "请输入要删除的页面名称",
        validateText:'我叫你一声',
        async onOk() {
          //此处是点击确定按钮的回调
          ...
        },
      });

五、效果

效果

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57341.html

相关文章

抖音引流的5大路径:从流量富矿抖音引流到私域流量微信。

抖音引流的5大路径:从流量富矿抖音引流到私域流量微信。

众所周知,抖音俨然成为当下最大的流量洼地,微信个人号则是管理私域流量,持续挖掘流量价值的最好载体,在这个存量竞争的时代,如何更好的将二者有机的结合呢? 今天我们就整理盘点5种主流引流模式来实现从“流量富矿”抖音引流到“私域流量”微信。 1、签名资料区 最普遍的形式是在签名资料区留下个人...

小编分享网站优化和网站推广可以一起进行吗。

小编分享网站优化和网站推广可以一起进行吗。

和优化一般都是可以同时进行的,因为网站推广对于网站的要求很高,网站优化的越好网站推广相对来说更简单,所以网站要在页面美观上也要多加注意。 现在的网络平台越来越多,随着个人与企业对网络平台的竞争意识越来越大的情况下,企业创建了企业站点,这时的网站优化与推广上有很多细节注意事项。 一、口碑...

银行核心系统之交易渠道原理

银行核心系统之交易渠道原理

转自:在CFCA发布的《2018中国电子银行调查报告》中,我们发现电子银行用户渗透的增速放缓,移动端渠道增速迅猛,手机银行渠道优势凸显,与其他各渠道协同发展;我们发现用户对二类账户的认知比例达 46%,所在城市级别越高,对二类账户认知率也越高;我们发现用户电子支付需求旺盛,...

你是怎样理解运营岗和项目管理岗的?

你是怎样理解运营岗和项目管理岗的?

在企业中,运营个管理是两个不相同的岗位,但是大家也容易把它搞混。下面就来给大家介绍一下吧运营岗位是一个企业中非常之最重要的工作,你可以理解为:运营就是每天重复同样的事情,反反复复,按照现有的最佳实践和,把这份工作做好,给企业带来流量等等,这种工作就叫做运营。在一个企业里有很...

你我的能量,的确超乎想象

你我的能量,的确超乎想象

纪念香港回归25周年的音乐类节目《声生不息》,正在湖南卫视火热上演。作为有过一些人生经历的成年人,我们已经不会花时间精力去赞誉或批评一档综艺节目,不过是有喜欢的就听听,没有也不置可否。凑巧,打开手机,听到了李健重唱《水中花》,干净而又雅致的声音。歌曲旋律本身就很打动人,李健...

快手信息流投放(介绍)推广详解

快手是一个记录与分享的平台:记录世界,记录你!在快手上,用户可以用照片和短视频记录自己的点滴,也可以通过直播与粉丝实时互动。快手拥有7亿用户,其中90后、00后人群占82%,日活跃户突破4亿,2021快手广告有限公司兹授权于深圳厚拓为KA效果广告代理商一、快手广告特点  展...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片