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 相关文章推荐
网上应用的一个不错common.js脚本
Aug 08 Javascript
Jquery 常用方法经典总结
Jan 28 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
js无刷新操作table的行和列
Mar 27 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 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抽象工厂模式(Elgg)
2010/03/21 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
PHP类型约束用法示例
2016/09/28 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
使用Python设计一个代码统计工具
2018/04/04 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
房产销售经理职责
2013/12/20 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
个人廉政承诺书
2015/04/28 职场文书
公司员工离职感言
2015/08/03 职场文书
初中军训感想
2015/08/07 职场文书
外科护士长工作总结
2015/08/12 职场文书
7个关于Python的经典基础案例
2021/11/07 Python