基于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 相关文章推荐
用JavaScript获取网页中的js、css、Flash等文件
Dec 20 Javascript
javascript import css实例代码
Jul 18 Javascript
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
Jquery下attr和removeAttr的使用方法
Dec 28 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 Javascript
VUE前端cookie简单操作
Oct 17 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 Javascript
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
Aug 12 Javascript
vue路由传参三种基本方式详解
Dec 09 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
php session安全问题分析
2011/06/24 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
python表格存取的方法
2018/03/07 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python对于requests的封装方法详解
2019/01/03 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python数据存储之 h5py详解
2019/12/26 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
车间副主任岗位职责
2013/12/24 职场文书
写给妈妈的道歉信
2014/01/11 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
运输公司工作总结
2015/08/11 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
python cv2图像质量压缩的算法示例
2021/06/04 Python