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 相关文章推荐
Javascript学习笔记5 类和对象
Jan 11 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
JS功能代码集锦
May 04 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
Jun 02 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
Jun 04 Javascript
微信小程序 rich-text的使用方法
Aug 04 Javascript
bootstrap-table formatter 使用vue组件的方法
May 09 Javascript
JS图片预加载三种实现方法解析
May 08 Javascript
vue+canvas实现移动端手写签名
May 21 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 Javascript
JS中循环遍历数组的四种方式总结
Jan 23 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python File(文件) 方法整理
2019/02/18 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
python破解同事的压缩包密码
2020/10/14 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
请解释virtual关键字的含义
2015/06/17 面试题
高中生毕业学习总结的自我评价
2013/11/14 职场文书
工业自动化专业毕业生推荐信
2013/11/18 职场文书
体育教师自荐信范文
2013/12/16 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
技能比武方案
2014/05/21 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
校长一岗双责责任书
2015/05/09 职场文书
python - timeit 时间模块
2021/04/06 Python
Python实战之疫苗研发情况可视化
2021/05/18 Python