基于vue写一个全局Message组件的实现


Posted in Javascript onAugust 15, 2019

不知道大家在用一些UI框架,比如Element-ui的时候,有没有觉得一些全局组件。this.$message(),this.Toast()等,用起来很爽。他们不像其他的组件,需要去导入,去注册。麻烦的很。

看了Element的源码,自己也撸了一个。其中包括了以前没有接触过的插件知识,哎,感觉自己对Vue的理解还是不够,只停留在了使用的这阶段。需要更多的往深层次的地方去钻。不说废话了,直接上代码。

效果演示

基于vue写一个全局Message组件的实现

全局组件需要一个index.js文件去注册

基于vue写一个全局Message组件的实现

BlogMessage.vue

这里的script是用ts写的。大家只需将这里稍做修改就可以了

<template>
 <transition name="slide">
  <div class="message-wrap" :class="type" v-if="visible">
   <div class="content">{{content}}</div>
  </div>
 </transition>
</template>
<script lang='ts'>
import { Component, Vue, Watch, Prop } from "vue-property-decorator";
@Component({
 components: {}
})
export default class extends Vue {
 private content: string = "";
 private visible: boolean = false;
 private type: string = "info"; // 'success','error'
 private startTimer() {
  window.setTimeout(() => {
   this.visible = false;
  }, 3000);
 }
 private mounted() {
  this.startTimer();
 }
}
</script>
<style scoped lang="scss">
.message-wrap {
 position: fixed;
 background-color: #44b0f3;
 color: #ffffff;
 left: 40%;
 width: 20%;
 top: 25px;
 height: 40px;
 z-index: 1001;
 border-radius: 4px;
 text-align: center;
 border: 1px solid #ebeef5;
 .content {
  line-height: 40px;
 }
}
.error {
 background-color: #fef0f0;
 color: #f56c6c;
}
.success {
 background-color: #f0f9eb;
 color: #67c23a;
}
.slide-enter-active,
.slide-leave-active {
 transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
 transition: all 0.2s ease;
}
.slide-enter,
.slide-leave-to {
 transform: translateY(-20px);
 opacity: 0;
}
</style>

index.js

import Vue from 'vue'
import BlogMessage from './BlogMessage.vue'
const MessageBox = Vue.extend(BlogMessage) // 创建的是一个组件构造器,不是实例
const Message = {
 install: (options, type, duration) => {
  if (options === undefined || options === null) {
   options = {
    content: ''
   }
  } else if (typeof options === 'string' || typeof options === 'number') {
   options = {
    content: options
   }
   if (type != undefined && options != null) {
    options.type = type;
   }
  }
  let instance = new MessageBox({
   data: options
  }).$mount()
  document.body.appendChild(instance.$el) // 添加dom元素
  Vue.nextTick(() => { // dom元素渲染完成后执行回调
   instance.visible = true
  })
 }
}
Vue.prototype.$message = Message.install;
['success', 'error'].forEach(type => {
 Vue.prototype.$message[type] = (content) => {
  return Vue.prototype.$message(content, type)
 }
})
export default Message

使用组件

1.全局注册

import Vue from 'vue';
import Message from '@/components/common/message';
Vue.use(Message);

2.调用方法

private test1() {
  this.$message("这是一条普通消息");
 }
 private test2() {
  this.$message.success("这是一条成功消息");
  // this.$message("这是一条成功消息", "success");
 }
 private test3() {
  this.$message.error("这是一条失败消息");
  // this.$message("这是一条失败消息", "error");
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ajax 缓存 问题 requestheader
Aug 01 Javascript
js中关于String对象的replace使用详解
May 24 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
JavaScript:Div层拖动效果实例代码
Aug 06 Javascript
javascript中attachEvent用法实例分析
May 14 Javascript
js实现大转盘抽奖游戏实例
Jun 24 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
JS中的三个循环小结
Jun 20 Javascript
Puppeteer 爬取动态生成的网页实战
Nov 14 Javascript
Node登录权限验证token验证实现的方法示例
May 25 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
Aug 15 #Javascript
解决vuex刷新状态初始化的方法实现
Aug 15 #Javascript
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 #Javascript
koa2+vue实现登陆及登录状态判断
Aug 15 #Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 #Javascript
快速对接payjq的个人微信支付接口过程解析
Aug 15 #Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 #Javascript
You might like
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
Ext 今日学习总结
2010/09/19 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
预备党员表决心的话
2015/09/22 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
python实现简易名片管理系统
2021/04/11 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python