用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 相关文章推荐
js的写法基础分析
Jan 17 Javascript
extjs render 用法介绍
Sep 11 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
浅析用prototype定义自己的方法
Nov 14 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
JavaScript实现购物车基本功能
Jul 21 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
Sep 11 jQuery
浅析JS抽象工厂模式
Dec 14 Javascript
JS精确判断数据类型代码实例
Dec 18 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 Javascript
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
基于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添加MySQL数据记录代码
2008/06/07 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
分分钟入门python语言
2018/03/20 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
银行内勤岗位职责
2014/04/09 职场文书
成都人事代理协议书
2014/10/25 职场文书