当前位置: 首页 > news >正文

使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框

提示:记录工作中遇到的需求及解决办法

文章目录

  • 前言
  • 一、目录结构
  • 二、代码
      • 1. 创建 m-Toast.vue 文件
      • 2. 创建 global.js 文件
      • 3. 在 main.js 文件中导入 global.js 文件
      • 4. 在 App.vue 文件中使用 全局方法创建的 组件


前言

在此之前一直不明白Vue.extend( )干什么用的,如何使用,看了一些视频,再结合vue文档,浅浅的理解了一些,以及一些简单的应用,如有不对请指出。
我将使用脚手架生成一个vue2项目来解释。


提示:以下是本篇文章正文内容,下面案例可供参考

一、目录结构

在这里插入图片描述

二、代码

1. 创建 m-Toast.vue 文件

<template><div class="message"><div class="text">{{ text }}</div></div>
</template> 
<script>
export default {name: 'm-Toast',props: {text: {type: String,default: ''},},mounted () {this.timer = setTimeout(() => {this.$destroy()clearTimeout(this.timer);}, 2000)},destroyed () {clearTimeout(this.timer);document.body.removeChild(this.$el)},methods: {},
}
</script>
<style scoped>
.message {min-width: 380px;background-color: #f0f9eb;color: #67c23a;position: fixed;padding: 15px 15px 15px 20px;top: 20px;left: 50%;z-index: 2022;font-size: 14px;transform: translate(-50%, 0);
}.text {overflow: hidden;align-items: center;
}
</style>

2. 创建 global.js 文件

import Vue from "vue";
import Toast from "./components/m-Toast.vue";/** 创建 Toast对应的Vue子类(构造器)* 结合vue文档 和 视频,* extends 的参数可以通过导入一个写好的组件* 或者 是函数 ,例如: * {*	template: '<div class="message">*								<div class="text">{{ text }}</div>*							</div>',*	data: function () {*		return {*			text: '测试',*		}*	}* }* 下面我选择通过导入组件的方法,因为方便使用样式,结构更明了*/
let ToastSubclass = Vue.extend(Toast)// 全局挂载到原型上方便调用
Vue.prototype.$toast = function (text) {// 创建实例let ToastConstructor = new ToastSubclass({// 就是在调用组件的时候,给组件传递属性值propsData: {text}});/** 挂载(渲染组件)* 使用 $mount() 但不传挂载点,返回一个完整的 Vue 组件实例*/ToastConstructor.$mount()// 把渲染后的真实DOM插入到BODY中即可document.body.appendChild(ToastConstructor.$el)
}

3. 在 main.js 文件中导入 global.js 文件

import Vue from 'vue'
import App from './App.vue'
// 导入 global.js 文件
import './global.js'Vue.config.productionTip = falsenew Vue({render: h => h(App),
}).$mount('#app')

4. 在 App.vue 文件中使用 全局方法创建的 组件

<template><div id="app"><button @click="config">按钮</button></div>
</template><script>export default {name: 'App',data () {return {count: 0}},mounted () {},methods: {config () {this.$toast(`测试${this.count++}`)}}
}
</script><style></style>
http://www.lryc.cn/news/448362.html

相关文章:

  • ansible部署二进制mysql 8
  • 【2023工业3D异常检测文献】基于混合融合的多模态工业异常检测方法Multi-3D-Memory (M3DM)
  • 基于微信小程序的宿舍报修系统的设计与实现(lw+演示+源码+运行)
  • 前端练习总结(1)
  • 计算机网络自顶向下(1)---网络基础
  • Pandas -----------------------基础知识(五)
  • RabbitMQ 高级特性——重试机制
  • 每天一道面试题(20):锁的发生原因和避免措施
  • 2024淘宝双11活动,收下这份必买好物推荐清单
  • vue-cli,element-plus,axios,proxy
  • 《Zeotero的学习》
  • 大数据复习知识点1
  • 9.26 Buu俩题解
  • Mitsuba 渲染基础
  • 深入理解 WebSocket:实时通信的利器
  • OpenEuler配置本地yum源
  • 论文不同写作风格下的ChatGPT提示词分享
  • 单点登录(SSO)基础
  • 设置VsCode搜索时排除文件,文件列表中隐藏文件
  • 急!现在转大模型还来得及吗?零基础入门到精通,收藏这一篇就够了
  • 使用 lstm + crf 实现NER
  • 【牛掰】这款RPA多平台引流获客软件已正式上线,助您日引流1000+
  • Python的包管理工具pip安装
  • 《AIGC 时代程序员的应对之策》
  • 51单片机系列-串口(UART)通信技术
  • 使用k8s部署java前后端服务
  • 使用docker创建zabbix服务器
  • nodejs 016: javascript语法——解构赋值({ a, b, c } = {})=>{console.log(“Hello“);}
  • 【人人都能看懂的大模型原理】(一)
  • JMeter源码解析之JMeter命令行新增命令