vue3.0实现插件封装


Posted in Vue.js onDecember 14, 2020

  最近公司有一个新的项目,项目框架是我来负责搭建的,所以果断选择了Vue3.x+ts。vue3.x不同于vue2.x,他们两的插件封装方式完全不一样。由于项目中需要用到自定义提示框,所以想着自己封装一个。vue2.x提供了一个vue.extend的全局方法。那么vue3.x是不是也会提供什么方法呢?果然从vue3.x源码中还是找到了。插件封装的方法,还是分为两步。

1、组件准备

  按照vue3.x的组件风格封装一个自定义提示框组件。在props属性中定义好。需要传入的数据流。

<template>
  <div v-show="visible" class="model-container">
   <div class="custom-confirm">
    <div class="custom-confirm-header">{{ title }}</div>
    <div class="custom-confirm-body" v-html="content"></div>
    <div class="custom-confirm-footer">
     <Button @click="handleOk">{{ okText }}</Button>
     <Button @click="handleCancel">{{ cancelText }}</Button>
    </div>
   </div>
  </div>
</template>
<script lang="ts">
import { defineComponent, watch, reactive, onMounted, onUnmounted, toRefs } from "vue";
export default defineComponent({
 name: "ElMessage",
 props: {
  title: {
   type: String,
   default: "",
  },
  content: {
   type: String,
   default: "",
  },
  okText: {
   type: String,
   default: "确定",
  },
  cancelText: {
   type: String,
   default: "取消",
  },
  ok: {
   type: Function,
  },
  cancel: {
   type: Function,
  },
 },
 setup(props, context) {
  const state = reactive({
   visible: false,
  });
  function handleCancel() {
   state.visible = false;
   props.cancel && props.cancel();
  }
  function handleOk() {
   state.visible = false;
   props.ok && props.ok();
  }
  return {
   ...toRefs(state),
   handleOk,
   handleCancel,
  };
 },
});
</script>

2、插件注册

  这个才是插件封装的重点。不过代码量非常少,只有那么核心的几行。主要是调用了vue3.x中的createVNode创建虚拟节点,然后调用render方法将虚拟节点渲染成真实节点。并挂在到真实节点上。本质上就是vue3.x源码中的mount操作。

import { createVNode, render } from 'vue';
import type {App} from "vue";
import MessageConstructor from './index.vue'
const body=document.body;
const Message: any= function(options:any){
 const modelDom=body.querySelector(`.container_message`)
  if(modelDom){
   body.removeChild(modelDom)
  }
  options.visible=true;
  const container = document.createElement('div')
  container.className = `container_message`
  //创建虚拟节点
  const vm = createVNode(
   MessageConstructor,
   options,
  )
  //渲染虚拟节点
  render(vm, container)
  document.body.appendChild(container);
} 
export default {
  //组件祖册
  install(app: App): void {
    app.config.globalProperties.$message = Message
  }
}

  插件封装完整地址。源码位置————packages/runtime-core/src/apiCreateApp中的createAppAPI函数中的mount方法。

vue3.0实现插件封装

vue3.0实现插件封装

以上就是vue3.0实现插件封装的详细内容,更多关于vue 插件封装的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue 递归组件的简单使用示例
Jan 14 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 #Vue.js
Vue实现点击当前行变色
Dec 14 #Vue.js
Vue实现简单购物车功能
Dec 13 #Vue.js
vue使用element-ui实现表单验证
Dec 13 #Vue.js
vue+element实现动态加载表单
Dec 13 #Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 #Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 #Vue.js
You might like
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
中学生个人自我评价
2014/02/06 职场文书
协议书怎么写
2014/04/21 职场文书
铁路安全事故反思
2014/04/26 职场文书
出国英文推荐信
2014/05/10 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2015年少先队活动总结
2015/03/25 职场文书
公安机关起诉意见书
2015/05/20 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
详解Vue router路由
2021/11/20 Vue.js
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python