vue 自定义插件编写之 confirm

21 篇文章 1 订阅
9 篇文章 0 订阅

插件通常用来为 Vue 添加全局功能

 

使用插件

通过 Vue 的全局方法 Vue.use() 使用,

当然,在使用这个方法之前,你的 Vue 实例 必须已经初始化完成

import myPlugin from './plugIn/myPlugin'

// 该方法,会调用 myPlugin 的 install 方法

Vue.use(myPlugin) 

开发插件 (写一个 confirm 例子)

定义 confirm template

<template>
  <div id="confirm" :id="show?'show':'hidden'">
    <div class="confirm-content">
      <div class="head">{{config.title}}</div>
      <div class="body">确定执行这个操作吗?</div>
      <div class="footer">
        <span class="cancle" @click="cancleBtnClick(false)">取消</span>
        <span class="sure" @click="sureBtnClick(true)">确定</span>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      show: false
    };
  },
  props: {
    config: {
      type: Object,
      default() {
        return {};
      }
    }
  },
  methods: {}
};
</script>
<style scoped>
#confirm {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 9000;
}
#show {
  display: block;
}
#hidden {
  display: none;
}
.confirm-content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%);
  background: white;
  width: 400px;
  height: 250px;
  border-radius: 10px;
}
.head {
  font-weight: bold;
  font-size: 22px;
  text-align: center;
  padding: 15px;
}
.body {
  font-size: 18px;
  padding: 15px;
}
.footer {
  display: flex;
  font-size: 16px;
  line-height: 30px;
  text-align: center;
  padding: 15px;
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
}
.footer span {
  cursor: pointer;
  flex: 1;
}
</style>

定义 Confirm.js


import ConfirmView from './Confirm.vue'

import Vue from 'vue'

let Confirm = {};

Confirm.install = function (Vue, options) {

    const ConfirmViewConstructor = Vue.extend(ConfirmView)

    // 生成一个该子类的实例
    const instance = new ConfirmViewConstructor();

    Vue.prototype.$lzyconfirm = (config)=>{

        // 这里 return 一个 Promise 
        // 在项目中使用的时候,就可以进行链式调用了~
        return new Promise((resolve,reject)=>{

            instance.config = config;

            instance.show = true;

            instance.sureBtnClick = ()=>{

                instance.show = false;

                resolve(true)

            }

            instance.cancleBtnClick = ()=>{

                instance.show = false;

                resolve(false)

            }

        })

    }

    // 将这个实例挂载在我创建的div上
    // 并将此div加入全局挂载点内部
    instance.$mount(document.createElement('div'))

    document.body.appendChild(instance.$el)

}

export default Confirm;

目录结构如下:

在main.js安装


import Confirm from './plugIn/Confirm/Confirm.js'

Vue.use(Confirm)

在项目中使用

 this.$lzyconfirm({

     title:'这是什么东西~',

     content:"我也不知道这是什么东西啊!!!"

}).then(res=>{

     console.log(res)

})

效果如下:

分别点击取消和确定的时候,上面的 console 会打印出来 false 和 true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值