Vue组件教程之Toast(Vue.extend 方式)详解


Posted in Javascript onJanuary 27, 2019

一、效果图

Vue组件教程之Toast(Vue.extend 方式)详解

二、说明

这类提示框组件我们通常都会直接在 JS 代码中进行调用。像下面这样:

this.$toast('别点啦,到头啦!')

但看到网上大多数还是通过 component 方式实现的,这样的话我们在使用的时候还要在 DOM 中放置一个组件元素,然后通过一个变量来控制它的显示隐藏,这样使用起来非常的不方便。那么有什么方法可以不用在 DOM 中手动放置组件元素就可以直接调用呢?答案就是 Vue.extend。通过 Vue.extend 方式实现的组件,需要两个文件,一个是 .vue 文件,另外一个就是管理 .vue 的 .js 文件。具体代码如下:

三、代码

Toast.vue 文件代码

<template>
 <div class="toast" v-show="visible">
 {{ message }}
 </div>
</template>

<script>
export default {
 name: 'toast',
 data () {
 return {
  message: '', // 消息文字
  duration: 3000, // 显示时长,毫秒
  closed: false, // 用来判断消息框是否关闭
  timer: null, // 计时器
  visible: false // 是否显示
 }
 },
 mounted () {
 this.startTimer()
 },
 watch: {
 closed (newVal) {
  if (newVal) {
  this.visible = false
  this.destroyElement()
  }
 }
 },
 methods: {
 destroyElement () {
  this.$destroy()
  this.$el.parentNode.removeChild(this.$el)
 },
 startTimer () {
  this.timer = setTimeout(() => {
  if (!this.closed) {
   this.closed = true
   clearTimeout(this.timer)
  }
  }, this.duration)
 }
 }
}
</script>

<style lang="scss" scoped>
.toast {
 position: fixed;
 bottom: 15vh;
 left: 28vw;
 min-width: 40vw;
 max-width: 100vw;
 font-size: 26px;
 text-align: center;
 padding: 10px 2vw;
 border-radius: 40px;
 background-color: rgba(0, 0, 0 , 0.6);
 color: rgb(223, 219, 219);
 letter-spacing: 3px;
}
</style>

Toast.js 文件代码

import Vue from 'vue'
import Toast from '@/components/layer/Toast.vue'

let ToastConstructor = Vue.extend(Toast) // 构造函数
let instance // 实例对象
let seed = 1 // 计数

const ToastDialog = (options = {}) => {
 if (typeof options === 'string') {
 options = {
  message: options
 }
 }
 let id = `toast_${seed++}`
 instance = new ToastConstructor({
 data: options
 })
 instance.id = id
 instance.vm = instance.$mount()
 document.body.appendChild(instance.vm.$el)
 instance.vm.visible = true
 instance.dom = instance.vm.$el
 instance.dom.style.zIndex = 999 + seed
 return instance.vm
}

export default ToastDialog

四、使用

首先在 main.js 中引入 Toast.js 并挂载到vue原型上,如下图:

Vue组件教程之Toast(Vue.extend 方式)详解

其次,在代码中使用

this.$toast('别点啦,到头啦!')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
arguments对象
Nov 20 Javascript
Javascript 获取LI里的内容
Dec 17 Javascript
js GridView 实现自动计算操作代码
Mar 25 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
JavaScript 数组循环引起的思考
Jan 01 Javascript
当jQuery1.7遇上focus方法的问题
Jan 26 Javascript
jquery单行文字向上滚动效果示例
Mar 06 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
jQuery中的一些小技巧
Jan 18 Javascript
vue中使用echarts制作圆环图的实例代码
Jul 27 Javascript
js制作提示框插件
Dec 24 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 #Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 #Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 #Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 #Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 #Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 #Javascript
vue-cli构建vue项目的步骤详解
Jan 27 #Javascript
You might like
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
Django 实现图片上传和下载功能
2020/12/31 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
yy结婚证婚词
2014/01/10 职场文书
小学新学期教师寄语
2014/01/18 职场文书
担保书格式及范文
2014/04/01 职场文书
优秀求职信
2014/05/29 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
五一劳动节活动总结
2015/02/09 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python