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 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
JS 文件传参及处理技巧分析
May 13 Javascript
javascript 学习笔记(onchange等)
Nov 14 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 Javascript
jQuery选择器全集详解
Nov 24 Javascript
常用的jQuery前端技巧收集
Dec 24 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
JavaScript实现定时页面跳转功能示例
Feb 14 Javascript
关于AOP在JS中的实现与应用详解
May 06 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命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
使用python绘制常用的图表
2016/08/27 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python3中函数参数的四种简单用法
2018/07/09 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python 项目转化为so文件实例
2019/12/23 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
类如何去实现接口
2013/12/19 面试题
《晚上的太阳》教学反思
2014/04/23 职场文书
银行进社区活动总结
2014/07/07 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
雾霾停课通知
2015/04/24 职场文书
2016入党心得体会范文
2016/01/06 职场文书
Java 数组的使用
2022/05/11 Java/Android