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 相关文章推荐
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
每天一篇javascript学习小结(属性定义方法)
Nov 19 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
浅谈Angular7 项目开发总结
Dec 19 Javascript
JavaScript基于用户照片姓名生成海报
May 29 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
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,不用COM,生成excel文件
2006/10/09 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python实现网站表单提交和模板
2019/01/15 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
python ChainMap的使用和说明详解
2019/06/11 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
pygame实现五子棋游戏
2019/10/29 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
python实现简单猜单词游戏
2020/12/24 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
单位门卫岗位职责
2013/12/20 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
单位租房协议书范本
2014/12/04 职场文书
老人院义工活动感想
2015/08/07 职场文书
2016新年问候语大全
2015/11/11 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
DSP接收机前端设想
2022/04/05 无线电