用Vue.extend构建消息提示组件的方法实例


Posted in Javascript onAugust 08, 2017

前提

前段时间自己做的vue练手项目,需要一个通用的消息提示组件,但是消息提示这种组件我更想用方法来调用,而不是在各个页面上都添加个组件(那样感觉很麻烦,重度懒癌患者),于是就上网差查了查,并研究了ElementUI的message源码。自己弄出来一个简陋的消息提示组件

Vue.extend是什么

用Vue.extend构建消息提示组件的方法实例

按照官方文档说法,他是一个类构造器,用来创建一个子类vue并返回构造函数,而Vue.component它的任务是将给定的构造函数与字符串ID相关联,以便Vue.js可以在模板中接收它。
了解了这点之后我们开始做我们的消息提示组件吧。

消息提示组件

首先我们先创建我们的提示组件的模板

<template>
  <transition name="message-fade">
    <div class="message" v-show="show">
    <span class="icon"><icon name="info"></icon></span>
      <p>{{message}}</p>
    </div>
  </transition>
</template>

<script>
  export default {
    name: 'v-message',
    mounted(){
      this.StartTime();
    },
    data(){
      return {
        message: '123',
        show: false,
        timer: null
      }
    },
    methods:{
      StartTime(){
        this.show = true;
        if(this.timer){
          clearTimeOut(this.timer)
        }else{
          this.timer = setTimeout(()=>{
            this.show = false
          }, 3000);
        }
      }
    }
  }
</script>

之后我们需要用将message.vue传到Vue.extend()里

import Vue from 'vue';
let MessageBox = Vue.extend(require('./message.vue'));
let instance;
var message = function(options){
  if(typeof options === 'string'){
    options = {
      message: options
    }
  }
  //生成组件
  instance = new MessageBox({
    data: options
  })
  //组件需要挂载在dom元素上
  instance.vm = instance.$mount();
  //根据不同的类型,设置不同消息的背景颜色
  if(options.type){
    instance.vm.$el.children[0].className += ` icon__${options.type}`;
  }
  document.body.appendChild(instance.vm.$el);
  return instance.vm;
}

const type = ['success', 'info', 'warning', 'error'];
type.forEach((type)=>{
  message[type] = options =>{
    if(typeof options === 'string'){
      options = {
        message: options
      }
    }
    options.type = type;
    return message(options);
  }
})

export default message;

之后用挂在全局方法上,之后用this.$message()方法调用

vue.prototype.$message = message;

最后的效果图

用Vue.extend构建消息提示组件的方法实例

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

Javascript 相关文章推荐
jQuery EasyUI API 中文文档 - Menu菜单
Oct 03 Javascript
js 处理数组重复元素示例代码
Dec 27 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
js限制文本框只能输入数字方法小结
Jun 16 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
javascript中this用法实例详解
Apr 06 Javascript
angular.fromJson与toJson方法用法示例
May 17 Javascript
JavaScript标准对象_动力节点Java学院整理
Jun 27 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
vue下跨域设置的相关介绍
Aug 26 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 #Javascript
VUE实现表单元素双向绑定(总结)
Aug 08 #Javascript
ES6模块化的import和export用法方法总结
Aug 08 #Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 #Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 #Javascript
vue-quill-editor实现图片上传功能
Aug 08 #Javascript
vue.js评论发布信息可插入QQ表情功能
Aug 08 #Javascript
You might like
php轻松实现中英文混排字符串截取
2014/05/28 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
公共事业管理本科生求职信
2013/10/07 职场文书
实习生自荐信范文
2013/11/13 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
临床医师个人自我评价
2014/04/06 职场文书
《四季》教学反思
2014/04/08 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
2015年计划生育责任书
2015/05/08 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
Java 多线程协作作业之信号同步
2022/05/11 Java/Android