推广

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

iseeyu3年前 (2024-02-21)推广133

弹窗

然后我在想,能不能自己也封装一个这种组件,不用每次都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

相关文章

西安企业做百度推广,一个月花三千和花三万到底差在哪?

4|最近跟几个西安的老板聊天,发现一个挺有意思的现象:同样做百度推广,有人一个月花三千块,询盘不断;有人一个月砸三万,水花都没见着。问他们区别在哪,大多数人说不清楚,只知道'钱花了,没效果'。 5| 6|百度推广这东西,说复杂也复杂,说简单也简单。核心就一件事:让你的潜在客户搜某个词的时候,你的信息...

我想当策划,大学应该选什么专业?

我想当策划,大学应该选什么专业?

学,广告,传播,公关,这些专业其实都可以。另外也可以学像汉语言文学,以及一些跟文学相关的一些专业,会对你找工作有帮助。但是,你想从事这个这份职业,除了专业的学习之外,更多的是,你要在上学的时候积极参与一些更营销策划相关的社会实践。比如说你可以做一些兼职,比如说帮别人去写稿,...

服装市场营销策略分析,“定位不慎满盘皆输”

服装市场营销策略分析,“定位不慎满盘皆输”

不同的区域需要不同的策略,而不同的营销策略需要不同的销售思路来配合。因此,在研究女装产品销售思路之前,最好先对于市场与营销策略做一次深入地了解。1.市场区域化(market segmentation):目标营销的第一步,是将整个市场拆分成若干个同性质的小市场。2.目标市场的...

晚间悦读丨你的思维方式,决定你的人生高度!

晚间悦读丨你的思维方式,决定你的人生高度!

越长大,越发现,能够决定你人生高度的,往往是你的认知层次。 你的认知在哪个层级,你的人生就处在什么状态。你认知的高度,决定了你人生的高度。 那如何才能升级方式、提升认知能力呢?可以从这三个方面做出改变。 NO. 1 改变态度 有人...

编写项目营销策划方案六大要点

编写项目营销策划方案六大要点

现在商业发展非常迅速,的需求非常的大,但是要做好营销策划是有一定难度的,我把自己做营销策划的一些体会在这里分享给朋友们。营销策划方案六大要点我们先说项目营销策划方案这个话题。大部分的营销策划人都是在企业里工作,大部分项目之初都是来源于一个想法,创始人、老板或者创始团队的一个...

【商场营销策划】如何进行商场营销策划?

【商场营销策划】如何进行商场营销策划?

商场是策划者们关注的永恒话题,那么究竟该如何作好商场营销策划呢?掌握以下这几点营销策略设计原则,至关重要!1.义利兼顾的原则。商场在获取利润的同时要充分考虑到消费者的合法利益和商场的长远利益。在作商场活动营销策略方案的时候应该将这一点作为首要的原则。对商场有利而对顾客不利的...

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

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