用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 相关文章推荐
datagrid框架的删除添加与修改
Apr 08 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
详解node.js搭建代理服务器请求数据
Apr 08 Javascript
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
JScript实现地址选择功能
Aug 15 Javascript
Angular实现下载安装包的功能代码分享
Sep 05 Javascript
详解JavaScript的变量
Apr 04 Javascript
js实现登录时记住密码的方法分析
Apr 05 Javascript
JavaScript Date对象功能与用法学习记录
Apr 28 Javascript
原生JavaScript实现刮刮乐
Sep 29 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
在JavaScript中实现命名空间
2006/11/23 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js日期联动示例
2014/05/02 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
python中assert用法实例分析
2015/04/30 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
使用tensorflow实现线性svm
2018/09/07 Python
python机器学习之神经网络实现
2018/10/13 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
运动会通讯稿50字
2014/01/30 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书