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制作sql转换为stringBuffer的小工具
Apr 03 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
Sep 06 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
深入理解jQuery3.0的domManip函数
Sep 01 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
JS中验证整数和小数的正则表达式
Oct 08 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
JS实现百度搜索框关键字推荐
Feb 17 Javascript
javascript实现左右缓动动画函数
Nov 25 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
改变Apache端口等配置修改方法
2008/06/05 PHP
解析php入库和出库
2013/06/25 PHP
linux中cd命令使用详解
2015/01/08 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
Python多项式回归的实现方法
2019/03/11 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python 标准差计算的实现(std)
2019/07/29 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
通过实例解析Python return运行原理
2020/03/04 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
sort命令的作用和用法
2013/08/25 面试题
教师业务学习制度
2014/01/25 职场文书
四个太阳教学反思
2014/02/01 职场文书
企业文化宣传标语
2014/06/09 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL