基于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和DOM Interfaces来处理HTML
Oct 09 Javascript
JQuery 选项卡效果(JS与HTML的分离)
Apr 01 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
简单的jquery左侧导航栏和页面选中效果
Aug 21 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
基于cookie实现zTree树刷新后展开状态不变
Feb 28 Javascript
使用 Node.js 开发资讯爬虫流程
Jan 07 Javascript
angular中子控制器向父控制器传值的实例
Oct 08 Javascript
npm的lock机制解析
Jun 20 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 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新手入门学习方法
2011/05/08 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python用threading实现多线程详解
2017/02/03 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
python里反向传播算法详解
2020/11/22 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
中学生期末评语
2014/02/03 职场文书
函授药学自我鉴定
2014/02/07 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
未婚证明书模板
2014/10/08 职场文书
行政前台岗位职责
2015/04/16 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Matlab如何实现矩阵复制扩充
2021/06/02 Python