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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
js弹出的对话窗口永远保持居中显示
Dec 15 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
Nov 22 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
javascript运算符语法全面概述
Jul 14 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
js作用域和作用域链及预解析
Apr 11 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
分享PHP入门的学习方法
2007/01/02 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php限制ip地址范围的方法
2015/03/31 PHP
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
打开电脑上的QQ的python代码
2013/02/10 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
婚礼主持词开场白
2014/03/13 职场文书
赔偿协议书范本
2014/04/15 职场文书
离婚民事起诉状
2015/08/03 职场文书
生产车间管理制度
2015/08/04 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis