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 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
May 22 Javascript
vue 父组件调用子组件方法及事件
Mar 29 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
Element el-button 按钮组件的使用详解
Feb 01 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下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
浅谈Python里面小数点精度的控制
2018/07/16 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python读取YAML文件过程详解
2019/12/30 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Python 串口通信的实现
2020/09/29 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
《赵州桥》教学反思
2014/02/17 职场文书
出售房屋委托书范本
2014/09/24 职场文书
会计实训报告范文
2014/11/04 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis