Vue.extend实现组件库message组件示例详解
目录
- 概述
- Vue.extend
- message 组件配置对象(就是.vue文件)
- message 生成组件的函数
- 使用方法
- 效果图
- 总结
概述 当我们使用组件库的时候,某些组件并不是直接放到模板当中进行使用,而是通过api的方式调用生成组件并且挂在到我们的页面中,其中最常见的就是message组件,我们在组件库中看到的多数都是api调用的方式生成。记录自己基本实现message组件。
Vue.extend 在vue中,要实现通过api方式实现组件的使用,这个aip是必不可少的,因此我们先了解下这个全局api的用法,官网说的很晦涩难懂,我的理解就是通过参数传递一个配置对象(这个配置对象就是我们模板中export default的那个对象,例如data,methods,props等等)都可以传递,接下来该函数会根据我们的配置对象生成一个继承自Vue的子组件构造函数,然后我们就可以通过实例化构造函数,生成对应的组件,然后我们就可以挂载到页面了。
message 组件配置对象(就是.vue文件)
X{{ message }}.message-box {position: fixed; left: 50%; transform: translateX(-50%); width: 400px; height: 50px; background-color: #ccc; .close {position: absolute; top: 0; right: 5px; cursor: pointer; }.message--box-content {line-height: 50px; text-indent: 2em; }&.message-box-success {background-color: green; }&.message-box-error {background-color: red; }&.message-box-default {background-color: #eee; }}.fade-enter-active,.fade-leave-active {transition: opacity 0.5s; }.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {opacity: 0; }
message 生成组件的函数
import MessageBoxOption from "./index.vue"; import Vue from "vue"; let messageBoxConstructor = Vue.extend({...MessageBoxOption,}); export default {install(Vue) {Vue.prototype.$Message = {instanceList: [],hide(types) {for (let instance of this.instanceList) {if (instance.types == types) {instance &&document.body.removeChild(instance.$el) &&Reflect.deleteProperty(this, types); }}},success(message) {if (!this.vmSuccess) {let messageBox = new messageBoxConstructor({propsData: {message,type: "success",top: (this.instanceList.length + 1) * 55,},}); let $Message = messageBox.$mount(); this.vmSuccess = $Message; this.instanceList.push({ ...$Message, types: "vmSuccess" }); document.body.appendChild($Message.$el); setTimeout(() => {this.hide("vmSuccess"); }, 4000); }},error(message) {if (!this.vmError) {let messageBox = new messageBoxConstructor({propsData: {message,type: "error",top: (this.instanceList.length + 1) * 55,},}); let $Message = messageBox.$mount(); this.vmError = $Message; this.instanceList.push({ ...$Message, types: "vmError" }); document.body.appendChild($Message.$el); setTimeout(() => {this.hide("vmError"); }, 6000); }},}; },};
使用方法
【Vue.extend实现组件库message组件示例详解】
效果图
文章图片
总结
- 要通过js的方式通过api调用生成,关键在在于Vue.extend函数的使用,上面只是个简单版本的,可以根据自己的需要,自动加以扩展。
- 我们这种弹窗组件一般做成单例,因此点击的时候不会重复出现相同类型的组件。
推荐阅读
- Python|Python venv虚拟环境跨设备迁移的实现
- Spring|Spring Boot实现功能的统一详解
- Vue项目如何实现rsa加密
- VUE 自定义指令实现点击后禁用elementUI按钮
- C语言实现学生考勤系统
- Vue中实现v-for循环遍历图片的方法
- 妙啊!纯|妙啊!纯 CSS 实现拼图游戏
- EasyUI使用DataGrid实现动态列数据绑定
- 基于Qt的TCP实现通信
- PDF如何转Excel(学会这3个方法,1分钟就能实现转换)